0

我有一个 ASP.NET MVC 应用程序,并且正在使用CKEditor进行文本输入。我已经关闭了输入验证,因此从 CKEditor 创建的 HTML 可以传递到控制器操作中。然后我在网页上显示输入的 HTML。

我只启用了 CKEditor 上的某些按钮,但显然有人可以发送他们想要的任何文本。我希望能够在用户输入后在页面上显示 HTML。如何验证输入,但仍然能够显示编辑器中启用的一些内容?

所以基本上我想清理所有东西,除了一些关键的东西,比如粗体、斜体、列表和链接。这需要在服务器端完成。

4

3 回答 3

0

从类似的问题中查看我的完整答案:

我发现用编码的尖括号替换尖括号可以解决大多数问题

于 2009-10-05T20:31:55.260 回答
0

AntiXSS怎么样?

于 2009-10-05T18:05:51.267 回答
0

您可以为您希望允许的 html 标签创建各种“白名单”。您可以从对整个内容进行 HTML 编码开始。然后,替换一系列“允许”的序列,例如:

"&lt;strong&gt;" and "&lt;/strong&gt;" back to "<strong>" and "</strong>"
"&lt;em&gt;" and "&lt;/em&gt;" back to "<em>" and "</em>"
"&lt;li&gt;" and "&lt;/li&gt;" back to ... etc. etc.

对于 A 标签之类的东西,您可以使用正则表达式(因为您也希望允许 href 属性)。你仍然需要小心 XSS;其他人已经推荐了 AntiXSS。

用于替换 A 标记的示例正则表达式:

&lt;a href="([^"]+)"&gt;

然后替换为

<a href="$1">

祝你好运!

于 2009-10-06T15:22:39.897 回答