PHP如何防止XSS攻擊?
XSS攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶加載并執行攻擊者惡意制造的網頁程序。這些惡意網頁程序通常是JavaScript,但實際上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻擊成功后,攻擊者可能得到包括但不限于更高的權限(如執行一些操作)、私密網頁內容、會話和cookie等各種內容。
HTML是一種超文本標記語言,通過將一些字符特殊地對待來區別文本和標記,例如,小于符號(<)被看作是HTML標簽的開始,<title>與</title>之間的字符是頁面的標題等等。當動態頁面中插入的內容含有這些特殊字符(如<)時,用戶瀏覽器會將其誤認為是插入了HTML標簽,當這些HTML標簽引入了一段JavaScript腳本時,這些腳本程序就將會在用戶瀏覽器中執行。所以,當這些特殊字符不能被動態頁面檢查或檢查出現失誤時,就將會產生XSS漏洞。
當然我會將標題設計的非常吸引人點擊,比如 “陳冠希艷照又有流出2012版(20P無碼)” ,這樣如果我將里面的alert換成惡意代碼,比如:
location.+document.cookie’;或者<a +document.cookie>。用戶的cookie我也拿到了,如果服務端session沒有設置過期的話,我以后甚至拿這個cookie而不需用戶名密碼,就可以以這個用戶的身份登錄成功了。
預防XSS攻擊
從根本上說,解決辦法是消除網站的XSS漏洞,這就需要網站開發者運用轉義安全字符等手段,始終把安全放在心上。
簡單點,就是過濾從表單提交來的數據,使用php過濾函數就可以達到很好的目的。
htmlspecialchars() 函數
代碼實例:
<?php
if (isset($_POST['name'])){
$str = trim($_POST['name']); //清理空格
$str = strip_tags($str); //過濾html標簽
$str = htmlspecialchars($str); //將字符內容轉化為html實體
$str = addslashes($str); //防止SQL注入
echo $str;
}
?>
<form method="post" action="">
<input name="name" type="text">
<input type="submit" value="提交" >
</form>
具體操作無法一一寫出,需要你邊實踐邊摸索