此外,重要的是要提到,允许人们将HTML或JavaScript注入你的页面(而不是你的数据源)本身并不附带固有的安全风险。已经存在浏览器扩展,允许您修改网页上的DOM和脚本,但由于它只是客户端,因此它们是唯一知道的。
XSS成为问题的地方是当人们a)使用它来绕过客户端验证或输入过滤或b)当人们使用它来操作输入字段时(例如,更改ACL中OPTACT标签的值以授予他们不应该拥有的权限)。防止这些攻击的唯一方法是在服务器端清理和验证输入,而不是在客户端验证之外进行验证。
为了清除输入中的HTML,htmlspecialchars是完全足够的,除非您想要允许某些标签,在这种情况下,您可以使用像HTMLPurifier这样的库。如果您将用户输入放在 HREF、ONCLICK 或任何允许编写脚本的属性中,那么您只是在自找麻烦。
编辑:看看你的代码,看起来你没有引用你的属性!这很愚蠢。如果有人将他们的用户名设置为:
john onclick="alert('hacking your megabits!1')"
然后,您的脚本将解析为:
<input type=text name=username value=john onclick="alert('hacking your megabits!1')">
始终在属性两边使用引号。即使它们不是用户输入的,这也是一个好习惯。
<input type="text" name="username" value="<?php echo htmlspecialchars($_POST['username']); ?>">