asp.net-mvc – 防止XSS攻击,仍然使用Html.Raw
我有CMS系统,我使用CK编辑器输入数据.现在,如果用户输入< script> alert(‘这是一个糟糕的脚本,数据’);< / script>然后CKEditor完成公平的工作并正确编码并传递& lt; script& gt; alert('这是一个糟糕的脚本,数据')& lt; / script& gt;到服务器.
但是如果用户进入浏览器开发人员工具(使用Inspect元素)并将其添加到其中,如下面的屏幕截图所示,那么这就是所有麻烦开始的时候.现在在从DB中检索回来后,它在浏览器中显示它会显示警告框. 到目前为止,我已经尝试了很多不同的东西 >使用AntiXssEncoder [HttpUtility.HtmlEncode(Contents)]对内容进行编码,然后将其存储在数据库中,当在浏览器中显示时,将其解码并使用MvcHtmlString.Create [MvcHtmlString.Create(HttpUtility.HtmlDecode(Contents))]或Html显示.Raw [Html.Raw(Contents)]正如您所期望的那样,它们都显示JavaScript警报. 我不想替换< script>手动通过代码,因为它是not comprehensive solution(搜索“和编码状态:”). 到目前为止,我已经提到了许多文章(抱歉没有在这里列出所有文章,但只是添加了一些作为证明我在写这个问题之前付出了真诚努力的证据)但是没有一个代码能够显示答案.可能有一些简单的答案,我不是在寻找正确的方向,或者可能不是那么简单,我可能需要使用像Content Security Policy这样的东西. ASP.Net MVC Html.Raw with AntiXSS protection 要重现我所说的,请转到* this url并在文本框中键入< script> alert(‘这是一个糟糕的脚本,数据’);< / script>然后单击按钮. *此链接来自Michael Kennedy的博客 解决方法
这并不容易,你可能不想这样做.我建议您使用比HTML更简单的语言来进行最终用户格式化输入吗?那么(我相信)Markdown使用的是Markdown.或者现有的Wiki或其他轻量级
markup languages之一?
如果你允许Html,我会建议如下: >仅支持固定的Html子集 有现成的工具和库可以做到这一点.我没有使用它,但我在http://htmlpurifier.org/偶然发现.我认为还有很多其他的. Rick Strahl拥有posted one example for .NET,但我不确定它是否完整. 大约十年前,我试图编写自己的白名单过滤器.它解析并规范化输入的Html.然后,它删除了不在允许的白名单上的任何元素或属性.它工作得很好,但你永远不知道你错过了哪些漏洞.该项目早已死亡,但如果我不得不这样做,我会使用现有的更简单的标记语言而不是Html. 用户有很多方法可以在页面中注入令人讨厌的东西,你必须要凶狠地防止这种情况发生.甚至可以使用CSS将可执行表达式注入页面,例如: <STYLE type="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE> Here is a page with a list of known attacks会让你夜不能寐.如果您无法过滤并阻止所有这些,则您尚未准备好让不受信任的用户发布公众可查看的格式化内容. 在我自己的过滤器工作的时候,MySpace(哇我老了)被一个名为Samy的XSS蠕虫击中.Samy使用带有javascript有效负载的嵌入式背景Url的Style属性.全是explained by the author. 请注意,您的example page说:
这里的关键问题是信任.如果您的所有用户都是可信任的(例如网站的员工),那么此处的风险就会降低.但是,如果您正在构建论坛或社交网络或约会网站或任何允许不受信任的用户输入其他人可以查看的格式化内容的内容,那么您很难对Html进行清理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 通过web.config从页面输出中删除BOM
- asp.net – 使用SqlMetal和Visual Studio时自动生成DataCon
- 捕获从ASP.NET生成的HTML
- asp.net-mvc – 在MVC3中使用Workflow Foundation来处理页面
- 单元测试 – 首先要测试的项目的哪个部分?
- asp.net-mvc – 在mvc4中的下拉列表更改事件中提交表单
- asp.net core系列 38 WebAPI 返回类型与响应格式--必备
- asp.net-mvc – 在IIS 5.1上部署ASP.NET MVC(Windows XP)
- asp.net – 代码无效或已过期.使用API??调用显式使会话无效
- asp.net全局资源错误’找不到具有键”的资源对象’