我正在使用 ASP.NET Web 窗体进行博客风格的评论。
编辑1:这看起来比我最初想的要复杂得多。你如何过滤src?
我宁愿仍然使用真正的 html 标签,但如果事情变得太复杂,我可能会采用自定义路线。我还没有做过任何 XML,所以我需要了解更多吗?
如果 IMG 是您唯一允许的,我建议您使用简单的方括号语法来允许它。这将消除对解析器的需求,并减少使用解析器的其他危险边缘情况的负载。说,类似:
Look at this! [http://a.b.c/m.jpg]
哪个会转换为
Look at this! <img src="http://a.b.c/m.jpg" />
您应该过滤 SRC 地址,以免恶意内容也通过 SRC 部分。就像也许
Look at this! [javascript:alert('pwned!')]
使用 XML 解析器来验证您的输入,并删除或编码您不想允许的所有元素和属性。在这种情况下,删除或编码除.<img>
tag, and all attributes from that except
and titlesrc
, alt
@chakrit 建议使用自定义语法,例如带括号的 URL - 这很可能是最好的解决方案。你绝对不想开始搞乱解析等。
只要确保你正确编码整个评论(根据上下文 - 在这里查看我的答案HTML 编码会防止各种 XSS 攻击吗?)
(顺便说一句,我刚刚发现了一个很好的自定义语法的示例就在那里... ;-) )
如前所述,将文件扩展名限制为 jpg/gif/etc - 即使可以绕过,也限制协议(例如 http://)。
除了 XSS 之外,另一个需要考虑的问题是 CSRF(http://www.owasp.org/index.php/Cross-Site_Request_Forgery)。如果你不熟悉这个安全问题,它基本上允许攻击者强制我的浏览器向你的应用程序提交一个有效的经过身份验证的请求,例如转账或更改我的密码。如果它托管在您的站点上,他可以匿名攻击任何易受攻击的应用程序——包括您的应用程序。(请注意,即使其他应用程序易受攻击,它们受到攻击也不是你的错,但你仍然不想成为漏洞利用主机或攻击源......)。例如,就您自己的网站而言,攻击者更改您网站上的用户密码要容易得多。