我正在浏览我的网站并进行安全审计。我只是简单地接受了这样一个事实,即我需要净化所有用户输入,但我从未真正停下来尝试过真正发生的事情。我现在开始尝试。
我在PHP页面上有一个典型的联系表格。这是_POST
的数据。$_POST["first_name"];
等
我这样做$firstName = htmlspecialchars($_POST["first_name"]);
是为了净化并显示如下消息。
echo $firstName . ', thank you for your interest. We'll be in touch soon!'
我开始玩这个,如果我在名字字段中输入<script>alert('hello')</script>
之类的东西,htmlspecialchars
就会完成它的工作并掩盖标签。
当我删除htmlspecialchars
时,脚本不会被转换,它在源中显示为<script>alert('hello')</script>
,但它不会执行。
我的问题是,为什么不执行?这不是XSS攻击基本上会做的事情吗?我是不是误解了什么?
当我在Chrome中尝试此操作时,我在控制台中看到一个错误:
拒绝执行JavaScript脚本。在请求中找到脚本的源代码。
因此,现代浏览器可能会进行这种检查来防止它。无论如何,你都应该继续对你的输入进行消毒,但检查你的控制台,你可能会看到这种情况。