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

我有一个textarea ,我想支持一些最简单的发布数据格式(至less,空格和换行符)。

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

所以,我可能应该过滤用户的input。 但是我怎么能这样做? 有没有准备好使用的解决scheme? 我正在使用JSF所以是否有任何智能组件,除了HTML标签过滤一切?

使用支持HTML过滤的HTMLparsing器,比如Jsoup的白名单。 这是从其网站的相关摘录。

清理不受信任的HTML

问题

您希望允许不受信任的用户在您的网站上提供HTML输出(例如,作为评论提交)。 您需要清理此HTML以避免跨站点脚本 (XSS)攻击。

使用jsoup HTML CleanerWhitelist指定的configuration。

 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; 在显示它的HTML元素上。

没有想到一体化的JSF组件。

是否有一些原因,你需要接受HTML而不是一些其他的标记语言,如降价(这是什么StackOverflow使用)?

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

不知道你想接受什么types的标签不会被md或类似的格式化语言覆盖…