1)我得到了html标签的回复,例如:这是<b>Test</b>
2)有时响应可能包含脚本(或iframe,canvas等)标签(XSS),例如:This <script>alert("Hello from XSS")</script> is <b>Test</b>
3)除了其他html标签之外,如何删除所有XSS标签(脚本,iframe,画布......)?
PS:我无法使用转义,因为它会删除<b>
,<strong>
和其他标记。
答案 0 :(得分:5)
除了其他html标签之外,如何删除所有XSS标签(脚本,iframe,canvas ...)?
所有标记都存在XSS风险。例如<b onmouseover="...">
,<a href="javascript:...">
或<strong style="padding: expression(...)">
。
要使HTML“安全”,您需要对其进行过滤,以便只允许一组最小的已知安全元素和属性。所有URL属性都需要进一步检查已知良好的协议。这被称为“白名单”。
这不是一项简单的任务,因为您通常必须正确解析HTML以检测存在哪些元素和属性。一个简单的正则表达式不足以获取一系列潜在麻烦的内容,特别是在具有相对有限的正则表达式引擎的JavaScript中(没有后瞻性,不可靠的前瞻等)。
有一些服务器端语言工具可以帮助您,例如PHP的HTML Purifier。我建议在返回内容之前在服务器端使用其中一个,因为我目前还没有意识到这种类型的JavaScript库。
答案 1 :(得分:1)
答案 2 :(得分:0)
下面的函数可用于编码输入数据以修复javascript上的XSS漏洞
/*Using jQuery : the script to escape HTML/JS characters*/
function htmlEncode(value) {
if (value) {
return $('<div/>').text(value).html();
} else {
return '';
}
}