防止XSS攻击,仍然使用Html.Raw

2023-11-21

我有 CMS 系统,我使用 CK 编辑器输入数据。现在如果用户输入<script>alert('This is a bad script, data');</script>然后 CKEditor 完成了公平的工作并正确编码并通过&lt;script&gt;alert(&#39;This is a bad script, data&#39;)&lt;/script&gt;到服务器。

但是,如果用户进入浏览器开发人员工具(使用 Inspect 元素)并将其添加到其中,如下面的屏幕截图所示,那么这就是所有麻烦开始的时候。现在,从数据库检索后,当它显示在浏览器中时,它会显示警报框。

Edit CKEditor contents thru inspect element

到目前为止,我已经尝试了很多不同的事情,其中​​之一就是

  • 使用对内容进行编码AntiXss编码器 [HttpUtility.HtmlEncode(Contents)] 然后将其存储在数据库中,并在浏览器中显示时对其进行解码并使用 MvcHtmlString.Create 显示它[MvcHtmlString.Create(HttpUtility.HtmlDecode(Contents))] 或 Html.Raw [Html.Raw(Contents)] 正如您所期望的那样,它们都显示 JavaScript 警报。

我不想更换<script>手动通过代码,因为它是不全面的解决方案(搜索“和编码状态:”)。

到目前为止,我已经参考了很多文章(抱歉,没有在这里列出所有文章,只是添加了一些文章作为证据,以表明我在写这个问题之前已经付出了真诚的努力),但没有一篇文章有​​显示答案的代码。可能有一些简单的答案,但我没有朝着正确的方向寻找,或者可能根本没那么简单,我可能需要使用类似的东西内容安全政策.

具有 AntiXSS 保护的 ASP.Net MVC Html.Raw 使用@Html.Raw有风险吗? http://blog.simontimms.com/2013/01/21/content-security-policy-for-asp-net-mvc/ http://blog.michaelckennedy.net/2012/10/15/understanding-text-encoding-in-asp-net-mvc/

要重现我所说的内容,请转到*this url并在文本框中输入<script>alert('This is a bad script, data');</script>并单击按钮。

*此链接来自迈克尔·肯尼迪的博客


我设法使用 NuGet 中的 HtmlSanitizer 解决了这个问题:

https://github.com/mganss/HtmlSanitizer

根据 OWASP 基金会的建议(我需要的好建议):

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#RULE_.236_-_Sanitize_HTML_Markup_with_a_Library_Designed_for_the_Job

首先,添加 NuGet 包:

> Install-Package HtmlSanitizer

然后我创建了一个扩展方法来简化事情:

using Ganss.XSS;

...

public static string RemoveHtmlXss(this string htmlIn, string baseUrl = null)
{
    if (htmlIn == null) return null;
    var sanitizer = new HtmlSanitizer();
    return sanitizer.Sanitize(htmlIn, baseUrl);
}

然后,当 HTML 发布时,我在控制器内进行验证:

var cleanHtml = model.DodgyHtml.RemoveHtmlXss();

为了完整起见,每次将其呈现到页面时都要进行清理,尤其是在使用 Html.Raw() 时:

<div>@Html.Raw(Model.NotSoSureHtml.RemoveHtmlXss())</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止XSS攻击,仍然使用Html.Raw 的相关文章

随机推荐

  • Cassandra 提交日志澄清

    我已经阅读了有关 Cassandra 提交日志的多个文档 对我来说 有关此 结构 的信息存在冲突 该图显示 当发生写入时 Cassandra 会写入内存表和提交日志 令人困惑的部分是该提交日志所在的位置 我反复看到的图表显示了磁盘上的提交日
  • 需要 git rebase -Ignore-all-space 来保留我的空间

    我正在做一个重大更改的变基 其中有很多空白更改 为了使合并能够正常工作 我需要 Xignore all space 根据 git help rebase 忽略空间更改 忽略所有空间 忽略 eol 处的空间 为了三向合并 将具有指定类型的空白
  • Java 将 int 转换为 hex 并再次转换回来

    我有以下代码 int Val 32768 String Hex Integer toHexString Val 这相当于ffff8000 int FirstAttempt Integer parseInt Hex 16 Error Inva
  • 获取堆栈中上一层函数的 __file__

    我发现我经常使用这种模式 os path join os path dirname file file path 所以我决定在一个包含许多这样的小实用程序的文件中放入一个函数 def filepath in cwd file path re
  • 防止列表视图丢失所选项目

    我目前正在 winform c 中的列表视图上工作 每次我点击列表视图上的空白区域时 所选项目丢失 列表视图控件有一个HideSelection默认为的属性True 做了False就可以开始了 在某些情况下这就足够了
  • 将class文件转换为dex文件

    android中如何将class文件转换为dex文件 有什么办法吗 使用 dex 选项调用 dx 命令 如下所示 dx dex output
  • 将新的 subversion 远程添加到现有的 Git 存储库中

    我有一个完全跟踪远程 SVN 存储库的 git 存储库 现在我需要添加一个新分支 该分支将跟踪完全不同的 SVN 存储库中的目录 那可能吗 It is git svn init只编辑默认的 svn 远程 你必须编辑配置文件 Look in
  • 如何在android中保存(切换)按钮状态?

    我在我的 andorid 应用程序中使用 SWITCH 如 android 切换按钮 而不是普通按钮 该代码在启用和禁用开关时工作正常 但我想存储开关的状态 假设我启用开关并关闭我的应用程序 后台代码将正常运行 但开关状态将更改为禁用 每次
  • iOS 开发:如何缩短代码中的 URL?

    我正在构建一个 iPhone 应用程序 我希望包含允许用户登录 Twitter 并在 Twitter 上发布指向我的应用程序的链接的功能 然而 为了做到这一点 该推文需要缩短我在 App Store 上的应用程序的 URL 如何编写代码来缩
  • 跟踪目录产品展示次数 - 增强型电子商务 Google Analytics

    我正在尝试使用以下方法在电子商务目录页面上实现产品印象谷歌分析增强电子商务追踪 按照规范 应该像这样实现它 ga create UA XXXXX Y ga require ec ga ec addImpression id P12345 P
  • 通过 SOCKS5 代理连接到 .NET Web 服务

    我正在尝试通过 SOCKS5 代理连接到 Web 服务 目前 我的app config如下
  • 如何在 Firefox 中让

    在这里 这个问题已经针对 IE 和 Chrome 得到了解答 但所提出的解决方案似乎不适用于 Firefox 16 45 以及可能之间的所有版本 基本上 建议的解决方案如下 table th td border 1px solid blac
  • 使用用户脚本捕获页面 xmlhttp 请求

    我有一个用户脚本 适用于 chrome 和 FF 它向页面添加了重要的功能 但最近被破坏了 因为开发人员向页面添加了一些 AJAX 我想修改脚本来监听页面 xmlhttp 请求 以便我可以根据 JSON 格式动态更新我添加的内容respon
  • 3D CSS 变换,Firefox 中的锯齿状边缘

    如同 css 变换 chrome 中的锯齿状边缘 同样的情况也发生在 Firefox 的 3D 变换上 例如 http jsfiddle net 78d8K 5 Firefox 这次 backface visibility没有帮助 任何想法
  • Python 中的迭代器节省内存吗?

    我不太明白Python中迭代器是如何拥有内存的 gt gt gt l1 1 2 3 4 5 6 gt gt gt l2 2 3 4 5 6 7 gt gt gt iz izip l1 l2 我们仍然需要O min l1 l2 内存 因为我们
  • 如何检查Kafka Consumer是否准备好

    我将 Kafka 提交策略设置为最新 但缺少前几条消息 如果我在开始向输入主题发送消息之前休息 20 秒 那么一切都会按预期进行 我不确定问题是否在于消费者花费很长时间进行分区重新平衡 有没有办法在开始轮询之前知道消费者是否准备好 您可以使
  • 在 WPF 中运行 Flash

    我正在尝试运行一个 swf在我的 WPF 应用程序中的文件中 我创建了一个html页面 其中我引用了我的 swf文件使用object标签 然后加载它html我的页面Main Window 我的 xaml 看起来像
  • 如何防止用户使用检查元素来启用禁用的元素?

    我有一个按钮如下
  • 如何将附加内容保存到我的 UIManagedDocument 文件包中?

    我在破译方面遇到了很多困难Apple 的文档UIManagedDocument 具体有以下方法 id additionalContentForURL NSURL absoluteURL error NSError error BOOL re
  • 防止XSS攻击,仍然使用Html.Raw

    我有 CMS 系统 我使用 CK 编辑器输入数据 现在如果用户输入然后 CKEditor 完成了公平的工作并正确编码并通过 lt script gt alert 39 This is a bad script data 39 lt scri