最好的正则表达式捕获XSS(跨站点脚本)攻击(在Java中)?
Jeff实际上在
Sanitize HTML发布了这个。但是他的例子是C#,我实际上对Java版本更感兴趣。有没有人有更好的Java版本?他的例子是否足够好,我可以直接从C#转换为Java?
[更新]我对这个问题提出了一个赏question,因为当我提出这个问题(*)的时候,因为没有像今天那样受欢迎。对于与安全有关的任何事情,人们看得越多越好! (*)其实我觉得还处于封闭测试阶段
不要用正则表达式做到这一点。请记住,您不是仅仅针对有效的HTML进行保护;您正在保护Web浏览器创建的DOM。浏览器可以很容易地被欺骗从无效的HTML生成有效的DOM。
例如,请参阅obfuscated XSS attacks的列表。您是否准备定制正则表达式以防止IE6 / 7/8上的Yahoo and Hotmail上的这个真实世界的攻击? <HTML><BODY> <?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time"> <?import namespace="t" implementation="#default#time2"> <t:set attributeName="innerHTML" to="XSS<SCRIPT DEFER>alert("XSS")</SCRIPT>"> </BODY></HTML> 这个IE6的攻击怎么样? <TABLE BACKGROUND="javascript:alert('XSS')"> 该网站上未列出的攻击如何?杰夫的做法的问题在于,它不是一个白名单。正如that page上的人擅长的一样:
我会建议一个专用的工具,如AntiSamy.它可以通过实际解析HTML,然后遍历DOM和删除任何不在配置白名单的工作。主要的区别是能够优雅地处理格式不正确的HTML。 最好的部分是它实际上是对上述站点上的所有XSS攻击进行单元测试。此外,可以比这个API调用更容易: public String toSafeHtml(String html) throws ScanException,PolicyException { Policy policy = Policy.getInstance(POLICY_FILE); AntiSamy antiSamy = new AntiSamy(); CleanResults cleanResults = antiSamy.scan(html,policy); return cleanResults.getCleanHTML().trim(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |