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

标签 java security jsf

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

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

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

最佳答案

使用支持 HTML 过滤白名单的 HTML 解析器,如 Jsoup .这是来自 its site 的相关摘录.

Sanitize untrusted HTML

Problem

You want to allow untrusted users to supply HTML for output on your website (e.g. as comment submission). You need to clean this HTML to avoid cross-site scripting (XSS) attacks.

Solution

Use the jsoup HTML Cleaner with a configuration specified by a 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>

然后要在保留空白的情况下显示它,请在要显示它的 HTML 元素上应用 CSS white-space: pre-wrap;

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

关于java - 如何实现用户以安全的方式发布一些 html 格式的数据的可能性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3410526/

相关文章:

java - 如何定期更改 Canvas 对象的颜色?

security - javacard 的最终安全步骤

database - 存储密码哈希

docker - 在 AWS Fargate 容器中存储数据库连接字符串

jsf - 如何在 JSF 1.2/Richfaces 3.3 中在渲染时调用 Javascript 函数?

eclipse - 访问 JFrame 时 JVM 以退出代码 1 终止

java - Autowiring @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES) 对象时出错

java - Java 中的 while 循环同时返回祝贺和抱歉消息

jsf - 做一个 h :inputText required only when the checkbox is selected

jsf - 单击链接时不要重新加载页面