我正在遇到有关Rails中的Authenticity Token的一些问题,因为我现在已经多次了.
但我真的不想只是解决这个问题而继续下去.我真的很想了解真实性令牌.那么,我的问题是,您是否有关于此主题的完整信息来源,或者您是否会花时间在此详细解释?
我偶然发现了一些我以前从未见过的东西.在Backbone.js的示例TODO应用程序(Backbone TODO示例)的源代码中,他们将模板放在a中<script type = "text/template"></script>,其中包含的代码看起来像是PHP之外但带有JavaScript标记的代码.
谁可以给我解释一下这个?这是合法的吗?
我的项目当前正在python中收到一条JSON消息,我需要从中获取一些信息.出于此目的,我们将其设置为字符串中的一些简单JSON:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在使用列表生成JSON请求,json.dumps但是为了做到与此相反,我认为我需要使用它,json.loads但我没有太多运气.任何人都可以给我一个片段,在上面的例子中输入"2"会返回"2"吗?
Google会像这样返回json:
throw 1; <dont be evil> { foo: bar}
Run Code Online (Sandbox Code Playgroud)
和Facebooks ajax有这样的json:
for(;;); {"error":0,"errorSummary": ""}
Run Code Online (Sandbox Code Playgroud)
作为对安全目的的回应:
如果刮刀位于另一个域上,则必须使用script标记来获取数据,因为XHR不会跨域工作.即使没有for(;;);攻击者如何获取数据?它没有分配给变量,所以它不会被垃圾收集,因为它没有引用它?
基本上,为了获得数据跨域,他们必须这样做
<script src="http://target.com/json.js"></script>
Run Code Online (Sandbox Code Playgroud)
但即使没有崩溃脚本,攻击者也不能使用任何Json数据而不将其分配给您可以全局访问的变量(在这些情况下不是这样).崩溃代码没有任何效果,因为即使没有它,他们也必须使用服务器端脚本来使用其站点上的数据.
可能重复:
为什么人们把代码放在"抛出1; <dont be evil>"and"for(;;);"在json回应之前?
我发现这种语法在Facebook上用于Ajax调用.我在for (;;);回答开始时对此感到困惑.它是干什么用的?
这是电话和回复:
GET http://0.131.channel.facebook.com/x/1476579705/51033089/false/p_1524926084=0
Run Code Online (Sandbox Code Playgroud)
响应:
for (;;);{"t":"continue"}
Run Code Online (Sandbox Code Playgroud) 我正在使用Backbone.js和Tornado Web服务器.在Backbone中接收集合数据的标准行为是作为JSON数组发送.
另一方面,由于以下漏洞,Tornado的标准行为是不允许使用JSON Array:
http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx
相关的一个是:http: //haacked.com/archive/2009/06/25/json-hijacking.aspx
当我真的是一个对象列表时,我不必在对象中包装我的JSON.
我无法在现代浏览器中重现这些攻击(即当前的Chrome,Firefox,Safari和IE9).与此同时,我无法确认现代浏览器解决这些问题的任何地方.
为了确保我既没有任何可能的糟糕的编程技能,也没有糟糕的谷歌搜索技能:
在现代浏览器中,这些JSON劫持攻击现在仍然是一个问题吗?
(注意:很抱歉可能重复:在现代浏览器上可以进行'JSON劫持'吗? 但由于接受的答案似乎没有回答这个问题 - 我认为现在是时候再问一遍并得到一些更明确的解释.)
我正在使用谷歌日历玩萤火虫.我碰巧发现某些XHR请求有如下响应:
while(1);[['us','bW9yZ2FuLmNoZW5nbW9AZ21haWwuY29t 20090320/20090904 63378122163']]
Run Code Online (Sandbox Code Playgroud)
它看起来像带有前缀死循环javascript语句的JSON.
我不确定为什么Google Calendar会有这种XHR响应.有关于此的任何已知的AJAX实践吗?
我正在使用Yii为网站构建API.我知道有一个名为CJson的实用程序类,它有一个名为encode的函数.
据我所知,还有其他参数可以在原生json_encode函数中自定义,如JSON_NUMERIC_CHECK,这非常有用.它创建
{
"id": 17
}
Run Code Online (Sandbox Code Playgroud)
而不是Yii的CJSON编码,它使'17'成为一个字符串.
{
"id": "17"
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我是否应该使用CJSON编码而不是内置的PHP函数json_encode?
在浏览facebook并使用Firebug网络调试器时,我注意到facebook的AJAX响应都以空循环开始.
例:
for(;;);{...}
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这样做?我认为这是为了防止某种XSS攻击,但我并不完全理解.谢谢!
在阅读了这个问题之后,为什么google/facebook等添加了无法解决的问题:
while(1); for(;;);&&&START&&& ... &&&END&&&对他们的JSON回应,我已经理解了动机.但是,我仍然不清楚为什么会使用这种相对复杂的机制,当类似的效果可以用类似的东西来实现
)在开头添加额外的内容,使整个行无效,语法错误现在,似乎这种无限循环和(奇怪的)语法错误的附加保护将是绕过旧的和允许的javascript解析器,但我似乎找不到任何引用,表明情况就是这样.还有另一个SO问题甚至消除了while(1);解决方法(说明1可能被破坏)并拒绝表单的另一种解决方法{}&&,但没有解释为什么或引用任何来源.
其他参考:
/*-secure-\n...*/