1)我得到带有html标签的响应,例如: This is <b>Test</b>
2)有时响应可能包含脚本(或iframe、canvas等)标签(XSS),例如:This <script>alert("Hello from XSS")</script> is <b>Test</b>
3)如何删除所有XSS标签(script、iframe、canvas...)除了其他html标签?
PS:我不能使用转义,因为它删除了<b>,<strong>和其他标签。
发布于 2011-09-03 21:09:22
如何删除所有的XSS标签(script、iframe、canvas...)除了其他html标签?
所有标签都可能存在XSS风险。例如<b onmouseover="...">、<a href="javascript:...">或<strong style="padding: expression(...)">。
要使HTML“安全”,您需要将其过滤为只允许已知安全的元素和属性的最小集合。所有URL属性都需要进一步检查已知良好的协议。这被称为“白名单”。
这不是一项简单的任务,因为您通常必须正确地解析HTML以检测存在哪些元素和属性。简单的正则表达式不足以提取潜在麻烦内容的范围,特别是在JavaScript中,它的正则表达式引擎相对有限(没有后视,不可靠的前视等)。
有一些针对服务器端语言的工具可以为您完成这项工作,例如PHP的HTML Purifier。我建议在返回内容之前在服务器端使用其中的一个库,因为我目前还不知道用于JavaScript的这种好的库。
发布于 2011-09-03 20:29:00
发布于 2014-04-23 12:53:36
下面的函数可用于对输入数据进行编码,以修复javascript上的XSS漏洞
/*Using jQuery : the script to escape HTML/JS characters*/
function htmlEncode(value) {
if (value) {
return $('<div/>').text(value).html();
} else {
return '';
}
}https://stackoverflow.com/questions/7293077
复制相似问题