草庐IT

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

coder 2024-07-20 原文

我有 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="" 编码。更安全的方法是取消转义所有这些类型的代码,然后以纯文本形式清理="">

顺便说一句,注意到这是 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/

有关javascript - Json.encode 特殊符号\u003c MVC3的更多相关文章

  1. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  2. ruby-on-rails - 如何使用 Rack 接收 JSON 对象 - 2

    我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":

  3. ruby-on-rails - 标准化文件名的字符串,删除重音和特殊字符 - 2

    我正在尝试找到一种方法来规范化字符串以将其作为文件名传递。到目前为止我有这个:my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.gsub(/[^a-z]/,'_')但第一个问题:-字符。我猜这个方法还有更多问题。我不控制名称,名称字符串可以有重音符、空格和特殊字符。我想删除所有这些,用相应的字母('é'=>'e')替换重音符号,并将其余的替换为'_'字符。名字是这样的:“Prélèvements-常规”“健康证”...我希望它们像一个没有空格/特殊字符的文件名:“prelevements_routin

  4. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  5. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  6. ruby - 鸭子输入字符串、符号和数组的优雅方式? - 2

    这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby​​。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac

  7. ruby - 如果它是标点符号,我怎么能从字符串中删除最后一个字符,在 ruby​​ 中? - 2

    啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组

  8. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  9. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  10. ruby-on-rails - Rails 渲染带有驼峰命名法的 json 对象 - 2

    我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'

随机推荐