2011-02-05 33 views
1

可能重複:
What are the best practices for avoid xss attacks in a PHP site如何防止在查詢字符串中放置<script>元素的XSS攻擊?

例如:

http://www.mid-day.com/searchresult.php?query=%3Cscript%3Ealert%28%22This%20is%20vulnerable%20for%20XSS%20..%20by%20binny%22%29%3C/script%3E 

這個網站有一個XSS DOM基於漏洞,我想知道是什麼原因導致這個漏洞以及如何預防它?

+0

更多可能的副本:http://stackoverflow.com/search?q=xss+php – Gordon 2011-02-05 09:10:08

回答

3

在輸出之前,您應該始終對來自用戶的值(如查詢字符串參數)進行HTML編碼。您可以使用htmlentities函數。

相反的:

$str = $_GET['a']; 
echo $str; 

使用:

$str = $_GET['a']; 
echo htmlentities($str); 
1

你可以去HTML Purifier

HTML淨化器是用PHP編寫的符合標準的 HTML過濾庫。 HTML淨化器不僅會爲一個徹底的審計,
安全又寬容的白名單中刪除所有 惡意代碼(一般稱爲 XSS),它 也將確保您的文檔 符合標準,有些事只有 與實現有關W3C規範的全面的知識。

內置PHP函數不會響應各種攻擊,這就是爲什麼需要這種開源解決方案的原因。

我也建議你看一看:

3

你不應該附和直接的是在$ _REQUEST,$ _ POST,$ _ GET,或$ _ SERVER變量。

如果你有這樣的事情:

index.php?text=hai

和你說:

echo $_GET['text']

它是不是安全。 如果你把腳本又在裏面:

index.php?text=<script>alert(document.cookie);</script>

它會顯示文檔的cookie。不是真的安全。

與提交內容時的$ _REQUEST和$ _POST相同。並與_SERVER [ 'THIS_URI'] $ ...

index.php?url=<script><!-- something --></script>

和你做

<form action="<?php echo $_SERVER['THIS_URI']; ?>">然後你會得到一個XSS破解了。

Allways use htmlentities($string) and in MySQL queries mysql_real_escape_string($string)

問候。