2009/08/10

Cross-Site Scripting / 跨站腳本攻擊,簡稱XSS


原文連結
Cross-Site Scripting中文譯為「跨站腳本攻擊」,簡稱XSS。此乃是駭客利用網站上允許使用者輸入字元或字串的欄位插入HTML與Script語言,造成其他正常使用者在觀看網頁的同時,瀏覽器會主動下載並執行部份惡意的程式碼,或被暗地裡導入到惡意的網站,而受到某種型態的影響。

XSS攻擊介於駭客與使用者之間的攻防戰,並不會對server主機有任何威脅,所以才被稱為跨站腳本攻擊,意思即是:駭客使用某些語言(腳本)跨過主機對使用者進行攻擊。

換句話說,要防止XSS攻擊,修改程式碼為不二法則。最簡單防止XSS的攻擊,必須在使用者輸入欄位加入過濾字串的功能,將『<』、『>』、『%』、『/』、『()』、『&』等符號進行過濾不予輸出至網頁,或限定欄位長度的輸入。

PHP 可以使用 htmlspecialchars() 轉換這些特殊字元

以下舉個簡單的例子更容易了解 :

if(isset($_POST['content'])) {
/* --------------------

加上過濾機制,不會被 XSS 攻擊

$sql = "INSERT INTO `xss_test` (`content`) VALUES ('".htmlspecialchars($_POST['content'])."')";  
----------------------*/

// 未加上過濾機制,會被 XSS 攻擊
$sql = "INSERT INTO `xss_test` (`content`) VALUES ('".$_POST['content']."')";

mysql_query($sql);
$sql = "SELECT * FROM `xss_test` ORDER BY id DESC LIMIT 1";
$rs = mysql_query($sql);

if(mysql_num_rows($rs)!=0){
list($id, $content) = mysql_fetch_row($rs);
echo $content;
}
}
?>
<form method="post">
<textarea name="content"></textarea>
<input type="submit">
</form>

把上面的程式碼拿來測試看看,如果在輸入文字的 textarea 欄位,輸入 <script>alert('javascript 會被執行喔!')</script>,就可以了解 XSS 是怎麼一回事了

沒有留言:

張貼留言