什么是XSS
XSS(cross-site scripting),跨站脚本攻击,是Web安全中很重要的一个议题。
这篇文章演示了如何利用脚本注入来攻击一个网站,以及如何抵御这种注入攻击。
网站源代码
<?php
$xss = isset($_POST['xss']) ? $_POST['xss'] : '';
if ($xss) {
file_put_contents('post.data',$xss);
echo "Saved!";
exit;
}
?>
<html>
<head>
</head>
<body>
<h2>Your input</h2>
<?php
$xss = file_get_contents('post.data');
?>
<p><?=$xss?></p>
</body>
</html>
注入可执行脚本
用POSTMAN将数据POST到网站,xss的值如下:
hello</p><script type="text/javascript">alert("abc")</script><p>
可以看到,xss的值包含了一段javascript代码
访问网站
你会发现网站上弹出了alert对话框。
如何抵御
对html特殊字符进行转义,php为我们提供了方法htmlspecialchars()。
<?php
$xss = isset($_POST['xss']) ? $_POST['xss'] : '';
$xss = htmlspecialchars($xss);
if ($xss) {
file_put_contents('post.data',$xss);
echo "Saved!";
exit;
}
?>
重新提交数据
访问网站,刚才的输入原封不动的显示在网页上了,Good job!