代码之家  ›  专栏  ›  技术社区  ›  Roman

如何实现用户以安全的方式发布一些html格式的数据?

  •  6
  • Roman  · 技术社区  · 14 年前

    textarea

    我怎样才能做到这一点?如果我不逃避响应并保留一些html标记,那么它将是一个巨大的安全漏洞。但我没有看到任何其他解决方案,将允许在浏览器中的文本格式。

    所以,我可能应该过滤用户的输入。但我该怎么做呢?有现成的解决方案吗?我使用的是JSF,那么有没有什么智能组件可以过滤除html标记以外的所有内容呢?

    2 回复  |  直到 14 年前
        1
  •  8
  •   BalusC    10 年前

    使用HTML解析器,它支持针对白名单进行HTML过滤,比如 Jsoup . 以下是一个从 its site .

    Sanitize untrusted HTML

    您希望允许不受信任的用户在您的网站上为输出提供HTML(例如作为评论提交)。你需要清理这个HTML以避免 cross-site scripting (XSS)攻击。

    使用jsoup HTML Cleaner Whitelist .

    String unsafe = 
          "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
    String safe = Jsoup.clean(unsafe, Whitelist.basic());
          // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
    

    然后使用CSS来显示它并保留空白 white-space: pre-wrap;

    没有想到一个集成的JSF组件。

        2
  •  1
  •   Dan J    14 年前

    您需要接受HTML而不是其他标记语言(比如markdown,这就是StackOverflow使用的语言)的原因吗?

    http://daringfireball.net/projects/markdown/

    不知道什么样的标签,你想接受,不会涵盖md或类似的格式化语言。。。