我有一个用户可以将他们的数据发布到的个人资料字段。我使用以下正则表达式模式阻止任何内容/<(.+?)>/
它会阻止任何以 < 开头并以 > 结尾的内容。这会阻止 XSS 吗?我的意思是,如果不能使用 <> HTML 标签,他们现在无能为力。
实际上存在不需要右括号的 xss 攻击。
例如,此页面列出了一个在 IE 中工作的
<IMG SRC="javascript:alert('XSS')"
无论如何,你没有意识到这一点应该给你一个教训。像这样的黑名单很容易出错并且注定要失败。您应该使用应用适当转义的模板(在这种情况下为 HTML 实体编码,但它取决于输出将出现的上下文)。
如果您可以侥幸成功,请将输入限制为像字母数字这样的安全字符集,这样您一开始就不必担心这一点。并确保正确处理 unicode 和 null 字符。
浏览器在解析 html 时非常宽容。我怀疑以下输入而不关闭标签会起作用:
<input onfocus=alert(1) autofocus type=text
改用实体转义或白名单
哦,还有。不匹配\n,所以你有另一个绕过:
<script
>