【问题标题】:prevent xss but allow all html tags阻止 xss 但允许所有 html 标签
【发布时间】:2012-03-22 16:59:42
【问题描述】:

我正在建立一个博客,目前正在完成管理面板。

因为我将主要是管理它的人......我想确保当我输入时

<ul>
   <li>test</li>
   <li>test</li>
</ul>

会显示无序列表,但也会阻止XSS标签以防万一......

我该怎么做?

是否可以创建函数并替换ulolimg 等标签?

【问题讨论】:

  • 具体答案取决于所使用的网络编程语言。例如,如果是 Java,您可以为此使用 Jsoup。请编辑您的问题以提及并相应地标记它。
  • @BalusC 错过了,更新了问题...我正在使用 php。
  • 你可以使用HTML Purifier

标签: php html tags xss


【解决方案1】:

您正在寻找的是一个 HTML sanitizer。这些很难正确编写,因此您应该查看现有的库。对于 PHP,请查看HTML Purifier

适当的 XSS 保护不仅仅涉及 html 清理。开放 Web 应用程序安全项目 (OWASP) 制定了避免 XSS 攻击的规范指南:

XSS (Cross Site Scripting) Prevention Cheat Sheet

【讨论】:

    【解决方案2】:

    检查这个网址 - http://refactormycode.com/codes/333-sanitize-html

    关于这个问题还有另一个有用的线程以及如何处理这个问题 - What is the best way to store WMD input/markdown in SQL server and display later?

    【讨论】:

    • 第一个 URL 是为 StackOverflow 构建的 html sanitizer,但请注意,它只允许一小部分标签,并且不符合 OP 允许“所有 html 标签”的愿望。跨度>
    • 另外,如果你想使用 markdown 作为输入,请查看michelf.com/projects/php-markdown
    • @colin 我向用户指出了一个方法作为示例,OP 可以看到它如何用于剥离 XSS 标签并扩展/重用。
    【解决方案3】:

    在允许 HTML 的同时处理 XSS 的标准方法是:

    1. 通过(真正的)HTML 解析器运行 HTML
    2. 删除任何不在白名单上的元素或属性(使用第三方白名单作为起点,对您添加的任何其他元素/属性进行研究,以确保它们没有办法注入您的 JS不知道)。
    3. 检查所有 URI 的完整性
    4. 从 DOM 生成干净的 HTML

    具体情况取决于您使用的语言。

    【讨论】:

    • 第(2)项很难靠自己正确完成。例如,如果您允许元素&lt;a&gt; 具有属性href,那么&lt;a href="javascript:alert('XSS')">` 可能会让您大吃一惊。那是在您遇到&lt;span style="{ text-size: "expression(alert('XSS'))"; }"&gt; 之类的东西之前。在这种情况下,明智的做法是是使用经过验证的库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2014-01-19
    • 2011-09-08
    • 1970-01-01
    相关资源
    最近更新 更多