【问题标题】:How to fix XSS vulnerabilities on javascript?如何修复 javascript 上的 XSS 漏洞?
【发布时间】:2023-03-10 18:13:01
【问题描述】:

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:我不能使用escape,因为它会删除<b><strong>和其他标签。

【问题讨论】:

标签: javascript jquery xss


【解决方案1】:

如何删除除其他 html 标签之外的所有 XSS 标签(脚本、iframe、画布...)?

All 标签可能存在 XSS 风险。例如<b onmouseover="..."><a href="javascript:..."><strong style="padding: expression(...)">

要呈现“安全”的 HTML,您需要对其进行过滤以仅允许最小的一组已知安全元素和属性。所有 URL 属性都需要进一步检查已知良好的协议。这称为“白名单”。

这不是一项简单的任务,因为您通常必须正确解析 HTML 以检测存在哪些元素和属性。一个简单的正则表达式将不足以获取潜在的麻烦内容的范围,尤其是在具有相对有限的正则表达式引擎的 JavaScript 中(没有后视、不可靠的前瞻等)。

有一些用于服务器端语言的工具可以为您做到这一点,例如 PHP 的 HTML Purifier。我建议在返回内容之前在服务器端使用其中的一个,因为我目前不知道有这样一个好的 JavaScript 库。

【讨论】:

    【解决方案2】:

    以下函数可用于对输入数据进行编码以修复 javascript 上的 XSS 漏洞

    /*Using jQuery : the script to escape HTML/JS characters*/
    function htmlEncode(value) {
         if (value) {
             return $('<div/>').text(value).html();
         } else {
             return '';
         }
     }
    

    【讨论】:

      【解决方案3】:

      您不需要删除标签,只需进行翻译。 例如,将&amp;lt; 转为&amp;lt;,将&amp;gt; 转为&amp;gt; 等等。

      如果您使用的是 php,则有一些功能适用于此:

      htmlspecialchars

      htmlentities

      【讨论】:

      • 无法将 转为 >因为除了脚本标签还有 b、strong、i 等,它们仍然完好无损
      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多