【问题标题】:How to check if the content is plain text or not?如何检查内容是否为纯文本?
【发布时间】:2011-08-11 11:29:55
【问题描述】:

我有一个纯文本区域,我只接受来自用户的纯文本。我想确保用户不会在文本区域中放置任何标记。我还假设用户可以用不同的语言发帖。那么,在服务器端(使用 java)和客户端(使用 jquery)验证内容的最佳方法是什么。

我们将不胜感激。

更新:如果问题不够清楚,我很抱歉。为了简单起见,这就是我想要做的——我让用户在 textarea 中输入文本(这里没有富文本框)。对于文本区域中的每个双新行,我想在 HTML 页面中显示一个段落。我该如何正确地做到这一点?

【问题讨论】:

  • 为什么?您可以/应该只根据此输入对任何输出进行 HTMLEncode。
  • 你对“纯文本”的理解是什么?当 HTML 被解释为纯文本时,它也是纯文本。也许您只是想从用户输入中转义任何特殊的 HTML 字符,以便在浏览器中显示它们时不会将它们解释为 HTML?
  • 好吧,当我说纯文本时,我的意思是我不希望用户提供任何标记标签等。我计划将纯文本转换为简单的 HTML,以便它在网页中正确显示: EG:原始文本会像“这是一个简单的行\n\n and I and now in the second paragraph”,我将它转换为“

    This is a simple line

    and I现在在第二段

    “有更好的方法吗?

标签: java html parsing validation text


【解决方案1】:

验证用户对 HTML 内容的输入几乎没有意义。在网页上重新显示此用户输入时,您可以转义 HTML。由于您提到您在服务器端使用 Java,因此您可能使用 JSP 作为视图技术,很高兴知道您可以使用 JSTL <c:out> 标记和 fn:escapeXml() 函数来转义 HTML打印输出。

例如重新显示用户控制的输入时:

<c:out value="${somebean.sometext}" />

或重新显示用户提交的请求参数时:

<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />

这种方式,例如&lt;script&gt;alert('xss')&lt;/script&gt; 将作为&amp;lt;script&amp;gt;alert(&amp;#39;xss&amp;#39;)&amp;lt;/script&amp;gt; 打印到HTML 输出中,因此在最终用户自己键入时以HTML 字面意思显示。


如果您真的坚持要验证这一点,您最终可以为此获取一个像 Jsoup 这样的 HTML 解析器。

String text = request.getParameter("text");

if (!text.equals(Jsoup.parse(text).text())) {
    // There was HTML in the text.
}

更新根据您实际上想要根据 HTML 白名单清理输入以删除潜在恶意标签的 cmets。您也可以使用 Jsoup 执行此操作,另请参阅 this page

String sanitized = Jsoup.clean(text, Whitelist.basic());

Whitelist#basic() 允许的元素在API documentation 中指定。

【讨论】:

  • 我无法在 JSP 中转义 HTML,因为我计划在 HTML 页面中将文本显示为段落。因此,如果我的文本是这样的“

    第一段

    第二段

    ”,使用转义功能将在一行中显示整个文本。你认为我有任何其他选择,以便我可以正确显示段落。
  • 啊,您的 具体 问题是如何借助白名单从用户控制的 HTML 输入中删除恶意 XSS 攻击敏感标签?您也可以使用 Jsoup 执行此操作,请参阅答案更新。
  • 根据您的问题更新,要在 textarea 中重新显示用户输入的换行符,只需将 \n 替换为 &lt;p&gt; 或在包含元素上应用 CSS white-space:pre;。 (请注意,这开始变得相当混乱,我基本上对三个完全不同的问题给出了三个不同的答案;在提出问题之前,您应该尝试先弄清楚基本概念,然后针对每个单独的问题提出一个新问题)跨度>
【解决方案2】:

如果您想阻止它是 HTML 标记,您可以使用正则表达式在看到 V 形 (

【讨论】:

  • 这也将阻止用户输入诸如&lt;3 之类的表情符号或诸如3 &lt; 4 之类的表达式
  • 如果文本区域包含 HTML 标记,您是否要阻止提交,或者只是确保它在被抓取后不被解析为 HTML?
猜你喜欢
  • 2015-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多