Security BB代码与受限HTML

Security BB代码与受限HTML,security,Security,在post提交中允许(仅限白名单)纯标记标记(如a、b、i等)是否存在任何安全风险 BB代码似乎是注入代码和白名单“安全”html标记问题的一个沉重的解决方案,似乎比BB代码所需的所有解析和转换更容易 我发现许多bb代码库在嵌套元素方面存在问题(这是因为它们使用FSA或regex,而不是正确的解析器吗?),并且blockquote或fieldset由web浏览器正确解析 非常感谢所有人的意见。这似乎是每个人都会犯的错误,尽管它很简单 使用解析器 不管你是否使用降价、html、bbcode等等 使

在post提交中允许(仅限白名单)纯标记标记(如a、b、i等)是否存在任何安全风险

BB代码似乎是注入代码和白名单“安全”html标记问题的一个沉重的解决方案,似乎比BB代码所需的所有解析和转换更容易

我发现许多bb代码库在嵌套元素方面存在问题(这是因为它们使用FSA或regex,而不是正确的解析器吗?),并且blockquote或fieldset由web浏览器正确解析


非常感谢所有人的意见。

这似乎是每个人都会犯的错误,尽管它很简单

使用解析器

不管你是否使用降价、html、bbcode等等

使用解析器。真正的解析器。不是一堆正则表达式

解析器为您提供一个语法树。从syntaxtree派生html(仍然是对象树)。清理树(使用白名单),打印html


使用html作为语法非常好。只是不要试图用正则表达式来清理它。

这似乎是每个人都会犯的错误,尽管它很简单

使用解析器

不管你是否使用降价、html、bbcode等等

使用解析器。真正的解析器。不是一堆正则表达式

解析器为您提供一个语法树。从syntaxtree派生html(仍然是对象树)。清理树(使用白名单),打印html


使用html作为语法非常好。只是不要试图用正则表达式来清理它。

只要您:

  • 使用适当的HTML解析器来处理输入
  • 白名单上的标签,以便只有你想通过
  • 将标签上的属性列为白名单。如果您想允许
    样式
    (当然,对于
    样式
    属性,还需要使用真正的CSS解析器),那么这包括对
    样式
    属性中的内容进行解析和白名单
  • 在解析时重写HTML

  • 最后一点主要是关于获得一致和正确的HTML输出。您的解析器应该注意找出手写HTML中常见的混淆(例如不正确的嵌套标记)。

    只要您:

  • 使用适当的HTML解析器来处理输入
  • 白名单上的标签,以便只有你想通过
  • 将标签上的属性列为白名单。如果您想允许
    样式
    (当然,对于
    样式
    属性,还需要使用真正的CSS解析器),那么这包括对
    样式
    属性中的内容进行解析和白名单
  • 在解析时重写HTML

  • 最后一点主要是关于获得一致和正确的HTML输出。您的解析器应该注意找出手写HTML中常见的混淆(例如不正确的嵌套标记)。

    在允许css时要特别小心,因为如果您没有正确地将其列入白名单并对其进行解析,在那里执行XSS非常容易。@markijbema:这就是为什么我也要将其列入白名单,当然,使用一个真正的CSS解析器。@Beudled:向前支付,以后再帮助其他人:)在允许CSS时要非常小心,因为如果你没有正确地列出并解析它,在那里做XSS是非常容易的。@markijbema:这就是为什么我说要把它也列为白名单,当然,使用一个真正的CSS解析器。@困惑:向前支付,稍后帮助其他人:)类似于Python中的html.parser或Ruby中的Nokogiri?任何事情都可以,只要在某个时候你可以将其作为对象进行操作,然后根据对象而不是源文件打印html(因此,您的用户无法利用浏览器奇怪的html解析行为)。但nokogiri似乎是可能的,因为有人在它的基础上建立了白名单解析器:。最后一点建议,在一些单元测试中,看看环境卫生是否有效,只是为了确保,其次,当您有违规行为时,您可以将其添加到测试中(虽然这不可能通过阻止的方法实现,但我是分层防御的大力支持者:假设一切都可能失败)类似于Python中的html.parser或Ruby中的Nokogiri?任何事情都可以,只要在某个时候可以将其作为对象进行操作,然后根据对象而不是源文件打印出html(因此,您的用户无法利用浏览器奇怪的html解析行为)。但nokogiri似乎是可能的,因为有人在它的基础上建立了白名单解析器:。最后一点建议,在一些单元测试中,看看环境卫生是否有效,只是为了确保,其次,当您有违规行为时,您可以将其添加到测试中(虽然预防性方法不可能做到这一点,但我大力支持分层防御:假设一切都可能失败)