如何修复javascript上的XSS漏洞?

时间:2011-09-03 12:20:46

标签: javascript jquery xss

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>和其他标记。

3 个答案:

答案 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)

您无需删除标记,只需进行翻译即可。 例如,将<转为&lt;,将>转为&gt;等。

如果您使用的是php,则可以使用以下功能:

htmlspecialchars

htmlentities

答案 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 '';
     }
 }