我有一个 ASP.NET MVC 应用程序,并且正在使用CKEditor进行文本输入。我已经关闭了输入验证,因此从 CKEditor 创建的 HTML 可以传递到控制器操作中。然后我在网页上显示输入的 HTML。
我只启用了 CKEditor 上的某些按钮,但显然有人可以发送他们想要的任何文本。我希望能够在用户输入后在页面上显示 HTML。如何验证输入,但仍然能够显示编辑器中启用的一些内容?
所以基本上我想清理所有东西,除了一些关键的东西,比如粗体、斜体、列表和链接。这需要在服务器端完成。
我有一个 ASP.NET MVC 应用程序,并且正在使用CKEditor进行文本输入。我已经关闭了输入验证,因此从 CKEditor 创建的 HTML 可以传递到控制器操作中。然后我在网页上显示输入的 HTML。
我只启用了 CKEditor 上的某些按钮,但显然有人可以发送他们想要的任何文本。我希望能够在用户输入后在页面上显示 HTML。如何验证输入,但仍然能够显示编辑器中启用的一些内容?
所以基本上我想清理所有东西,除了一些关键的东西,比如粗体、斜体、列表和链接。这需要在服务器端完成。
从类似的问题中查看我的完整答案:
我发现用编码的尖括号替换尖括号可以解决大多数问题
AntiXSS怎么样?
您可以为您希望允许的 html 标签创建各种“白名单”。您可以从对整个内容进行 HTML 编码开始。然后,替换一系列“允许”的序列,例如:
"<strong>" and "</strong>" back to "<strong>" and "</strong>"
"<em>" and "</em>" back to "<em>" and "</em>"
"<li>" and "</li>" back to ... etc. etc.
对于 A 标签之类的东西,您可以使用正则表达式(因为您也希望允许 href 属性)。你仍然需要小心 XSS;其他人已经推荐了 AntiXSS。
用于替换 A 标记的示例正则表达式:
<a href="([^"]+)">
然后替换为
<a href="$1">
祝你好运!