我正在使用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>
,我会收到以下信息:<script>alert("!");</script>
方法二
与方法一相同,但在降价解析器完成工作后,反转卫生发生的顺序。这实际上是无用的,因为卫生功能将逃脱所有标记,恶意或标记解析器创建的标记。
虽然我想清理恶意内容,但我确实希望保留<pre>
和<blockquote>
代码的基本HTML代码和内容! - 任何想法如何?
谢谢!
答案 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就是您所需要的?