gpt4 book ai didi

javascript - Json.encode 特殊符号\u003c MVC3

转载 作者:数据小太阳 更新时间:2023-10-29 04:18:35 27 4
gpt4 key购买 nike

我有 JavaScript 应用程序,我在其中使用客户端模板(underscore.js、Backbone.js)。

初始页面加载的数据像这样绑定(bind)到页面中(.cshtml Razor 文件):

<div id="model">@Json.Encode(Model)</div>

Razor 引擎执行转义,因此,如果 Model

new { Title = "<script>alert('XSS');</script>" }

,在输出中我们有:

<div id="model">{&quot;Title&quot;:&quot;\u003cscript\u003ealert(\u0027XSS\u0027)\u003c/script\u003e&quot;}</div>

在“解析”操作之后:

var data = JSON.parse($("#model").html());

我们有 "Title" 的对象数据字段恰好 "<script>alert('XSS');</script>" !

当这转到下划线模板时,它会发出警报。

不知何故\u003c-类似的符号被视为正确的“<”符号。

如何将“<”符号转义为&lt;&gt;来自 DB(如果他们以某种方式到达那里)?

也许我可以调整 Json.Encode转义这些符号的序列化?也许我可以设置Entity Framework我正在使用它,以便在从数据库获取数据时始终绝对自动转义这些符号?

最佳答案

\u003c 和类似代码对 JS 完全有效。如果您愿意,可以使用此语法混淆整个 JS 文件。本质上,您会看到一个转义字符\,u 代表 unicode,然后是一个与符号相关的 4 个字符的十六进制代码。

http://javascript.about.com/library/blunicode.htm

\u003c - 如您所见,是 < 字符。

在 MVC 端“修复”此问题的一种方法是编写一个 RegEx 来查找模式\u - 然后捕获接下来的 4 个字符。然后您可以将它们取消编码为实际的 unicode 字符 - 并通过您的 XSS 预防算法运行生成的文本。

正如您在问题中指出的那样 - 仅查找“<”无济于事。您也不能只查找“\u003cscript”——因为这假设潜在的黑客没有简单地对整个“script”标记词进行 unicode 编码。更安全的方法是取消转义所有这些类型的代码,然后以纯文本形式清理 HTML。

顺便说一句,注意到这是 XSS 预防中的常见(且迄今未得到很好解决的)问题之一可能会让您感觉更好。因此,您并不是唯一想要更好解决方案的人...

您可以查看以下库以帮助进行实际的 html 清理:

http://wpl.codeplex.com/ (微软的解决方案尝试 - 尽管用户反馈非常糟糕) https://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project_.NET (一个旨在进行大量此类预防的私有(private)项目。我发现它很难使用,并且在 .NET 中实现不佳)

不过,两者都是很好的引用。

关于javascript - Json.encode 特殊符号\u003c MVC3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9404951/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com