如何清理用户输入但保留<pre> tags?</pre>的内容

时间:2010-11-13 14:58:44

标签: coldfusion sanitization

我正在使用Markdown格式的CKEditor来提交用户创建的内容。我想从恶意标签中清除这些内容,但我想保留标记解析器结果的格式。我使用了两种不起作用的方法。

方法一

<!--- Sanitize post content --->
<cfset this.text = HTMLEditFormat(this.text)>
<!--- Apply mark down parser --->
<cfx_markdown textIn="#this.text#" variable="parsedNewBody">

问题由于某种原因<pre><blockquote>被转义,因此我无法使用它们。仅显示特殊字符。其他降价标记效果很好,例如粗体,斜体等。可能是CKEdit没有正确地将降价标记应用于<pre><blockquote>吗?

示例:如果我要输入<pre><script>alert("!");</script></pre>,我会收到以下信息:&lt;script&gt;alert(&quot;!&quot;);&lt;/script&gt;

方法二

与方法一相同,但在降价解析器完成工作后,反转卫生发生的顺序。这实际上是无用的,因为卫生功能将逃脱所有标记,恶意或标记解析器创建的标记。

虽然我想清理恶意内容,但我确实希望保留<pre><blockquote>代码的基本HTML代码和内容! - 任何想法如何?

谢谢!

3 个答案:

答案 0 :(得分:4)

需要对用户生成的内容进行两项重要的清理工作。首先,您希望保护您的数据库免受SQL注入。您可以使用存储过程或<cfqueryparam>标记执行此操作,而无需修改数据。

您要做的另一件事是保护您的网站免受XSS和其他基于内容显示的攻击。您这样做的方法是清理显示内容 。从技术上讲,在保存之前这样做会很好,但通常最好的做法是尽可能存储最高保真度的数据,只修改它以便显示。无论哪种方式,我认为你的问题是你正在按顺序进行这种消毒。您应首先在内容上运行Markdown格式化程序,那么通过HTMLEditFormat()运行它。

同样重要的是要注意HTMLEditFormat不会保护你免受所有攻击,但这是一个好的开始。您将需要研究实现OWASP实用程序,这在ColdFusion中并不困难,因为您可以直接使用提供的Java实现。

答案 1 :(得分:0)

为什么不在解析之后只添加并添加pre标签?

我的意思是,如果你只关心一个dlast pre并且你没有嵌套pre或类似。如果cfx标签清除了pre,请创建新的包装器方法,该方法将检查是否&lt; pre&gt;存在,如果没有,添加它。此外,如果您使用预标签,我猜新线条字符很重要,因此请检查您的cfx对这些标记的作用。

答案 2 :(得分:-1)

也许HTMLEditFormat twin HTMLCodeFormat就是您所需要的?