当前位置: 首页 > 面试题库 >

人们为什么要输入“ throw 1; ”和“ for(;;);” 在json响应前面?[重复]

祁嘉瑞
2023-03-14
问题内容

Google会像这样返回json:

throw 1; <dont be evil> { foo: bar}

和Facebook的ajax具有这样的json:

for(;;); {"error":0,"errorSummary": ""}
  • 他们为什么放置将停止执行并生成无效json的代码?
  • 如果它无效,他们将如何解析它;如果您尝试评估它,它将崩溃吗?
  • 他们只是将其从字符串中删除(似乎很昂贵)吗?
  • 这有什么安全优势吗?

出于安全考虑,对此:

如果刮板在另一个域上,则它们将不得不使用script标签来获取数据,因为XHR无法跨域工作。即使没有,for(;;);攻击者也将如何获取数据?它没有分配给变量,所以不会因为没有引用而被垃圾回收吗?

基本上要获得跨域数据,他们必须要做

<script src="http://target.com/json.js"></script>

但是,即使没有前置崩溃脚本,攻击者也无法使用任何Json数据,除非将其分配给可以全局访问的变量(在这些情况下不是)。崩溃代码实际上无能为力,因为即使没有崩溃代码,他们也必须使用服务器端脚本来使用其站点上的数据。


问题答案:

即使没有,for(;;);攻击者也将如何获取数据?

攻击是基于改变行为的内置类型,特别是ObjectArray,通过改变它们的构造函数或其prototype。然后,当目标JSON使用{...}[...]构造时,它们将成为攻击者自己的那些对象版本,并且具有潜在的意外行为。

例如,您可以将setter-property侵入Object,这会出卖以对象常量编写的值:

Object.prototype.__defineSetter__('x', function(x) {
    alert('Ha! I steal '+x);
});

然后,当将a <script>指向使用该属性名称的JSON时:

{"x": "hello"}

该值"hello"将被泄漏。

数组和html" target="_blank">对象文字导致setter的调用方式是有争议的。Firefox删除了3.5版中的行为,以响应对备受瞩目的网站的公开攻击。但是,在撰写本文时,Safari(4)和Chrome(5)仍然容易受到此攻击。

所有浏览器现在禁止的另一种攻击是重新定义构造函数:

Array= function() {
    alert('I steal '+this);
};

[1, 2, 3]

目前,IE8的属性实现(基于ECMAScript第五版标准和Object.defineProperty)目前在Object.prototype或上不起作用Array.prototype

但是,除了保护过去的浏览器外,JavaScript的扩展可能会在将来引起更多类似的潜在泄漏,在这种情况下,谷壳应该也防止此类泄漏。



 类似资料:
  • 问题内容: Google返回json,如下所示: 和Facebook的ajax具有这样的json: 他们为什么放置将停止执行并生成无效json的代码? 如果它无效,他们将如何解析它;如果您尝试评估它,它将崩溃吗? 他们只是将其从字符串中删除(似乎很昂贵)吗? 这有什么安全优势吗? 出于安全考虑,对此: 如果刮板在另一个域上,则它们将不得不使用标签来获取数据,因为XHR无法跨域工作。即使没有,攻击者

  • 我的一位同事最近在eclipse中创建了一个新项目,并使用内置的git客户端提交和推送。在我克隆到计算机并用eclipse打开后,我发现eclipse正在创建.classpath文件。CLASSPATH不是eclipse项目(也是.project)查找引用的JAR的关键文件吗?我在谷歌后非常困惑,看到所有的讨论都在谈论忽略他们。难道它们不是Eclipse正确工作的关键吗?为什么人们忽视了他们?如果

  • 问题内容: 当引用类变量时,为什么人们要在它前面加上?我不是在谈论什么时候用于区分方法参数,而是在看起来没有必要的时候。 例: 在其中,为什么不仅仅引用为? 什么买什么? 这是一个其代码已在前面的stackoverflow问题。 问题答案: 某些人喜欢在私有数据成员之前添加“ m_”或名称接口“ IFoo”的原因相同。他们认为它提高了可读性和清晰度。您是否同意这样的约定是一个品味问题。

  • 我在这里(有点)了解jdk 5 Reentry antLock的功能 但为什么我们想要一个“再进入者”锁呢?i、 e如果一个线程已经锁定了一个对象,为什么它需要再次获取它?

  • 我得到以下例外: 执行INSERT INTO任务(task_title、task_description、task_priority、task_type、用户)时发生异常 (?, ?, ?, ?, ?)'带有参数["efSwedfgvswde","ewdfweds","正常",14,13]: SQLSTATE[23000]:完整性约束冲突: 1062重复条目'13'的关键'UNIQ_5058659

  • 问题内容: 我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。 我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。 但是无法确定为什么执行后服务器响应为JSON格式: 我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为