PHP防XSS攻击
防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