防XSS攻擊
什么是XSS攻擊
代碼實例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS原理重現</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="xss_input">
<input type="submit">
</form>
<hr>
<?php
$xss = $_GET['xss_input'];
echo '你輸入的字符為<br>'.$xss;
// echo '你輸入的字符為<br>'."<script>alert('xss')</script>";
?>
</body>
</html>
注意:如果要表單提交數據到自己頁面,action就設置為空
如果我們在表單中輸入的是"<script>alert('xss')</script>",那么,我們接收到的結果就是
echo '你輸入的字符為<br>'."<script>alert('xss')</script>";
於是就彈出了alert框,相當於就修改了程序。除了這些,還能制造其他麻煩,刷新或重定向,損壞網頁或表單,竊取cookie,AJAX(XMLHttpRequest)。
注意:有些瀏覽器自身可以識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;例如chrom,我在chrom中做實驗的時候,就會自動阻止,但獵豹瀏覽瀏覽器就不行。
XSS(Cross Site Scripting)攻擊的全稱是跨站腳本攻擊,跨站腳本攻擊的方式是惡意攻擊者在網頁中嵌入惡意腳本程序,當用戶打開網頁的時候腳本程序便在客戶端執行,盜取客戶的cookie及用戶名和密碼,下載執行病毒及木馬程序,甚至獲得客戶端的admin權限等。
預防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>
htmlspecialchars() 函數相當於單引號的功能,不會進行解釋,你輸入什么就是什么,和防SQL注入很類似。
函數詳解:http://www.runoob.com/php/func-string-htmlspecialchars.html