"抗XSS保护"通过在ajax响应之前添加)]}'

gen*_*sis 10 xss google-plus

Google plus会)]}'在第一行返回ajax请求.我听说它是​​对XSS的保护.在没有这种保护的情况下,有没有任何例子可以解决这个问题?

Jas*_*gel 15

这是我最好的猜测,这里发生了什么.

首先,谷歌json格式的其他方面是不完全有效的json.因此,除了任何保护目的,他们可能正在使用此特定字符串来表示文件的其余部分是google-json格式,需要进行相应的解释.

使用此约定还意味着数据馈送不会从脚本标记的调用执行,也不会直接从eval()解释javascript.这可以确保前端开发人员通过解析器传递内容,这将使任何植入的代码无法执行.

因此,为了回答你的问题,有两种可能的攻击可以防止,一种是通过脚本标记的跨站点,但更有趣的是在站内.两种攻击均假定:

  1. 用户数据如何转义存在错误
  2. 它的开发方式允许攻击者将代码注入其中一个数据源.

举一个简单的例子,假设一个用户想出了如何获取一个像示例的字符串

["example"] 
Run Code Online (Sandbox Code Playgroud)

并将其更改为"]; alert('example');

[""];alert('example');"]
Run Code Online (Sandbox Code Playgroud)

现在,如果该数据显示在另一个用户的源中,则攻击者可以在用户的​​浏览器中执行任意代码.由于它位于站点内,因此将cookie发送到服务器,攻击者可以自动执行诸如共享帖子或从用户帐户发送消息的人员.

在Google方案中,由于多种原因,这些攻击无法发挥作用.在运行攻击代码之前,前5个字符将导致javascript错误.此外,由于开发人员被迫解析代码而不是意外地通过eval运行代码,因此这种做法无论如何都会阻止代码执行.


met*_*ode 7

正如其他人所说,这是对跨站点脚本包含(XSSI)的保护

我们在Gruyere上解释了这个:

第三,您应该确保该脚本不可执行.执行此操作的标准方法是向其附加一些非可执行的前缀,例如])} while(1);. 在同一域中运行的脚本可以读取响应的内容并删除前缀,但在其他域中运行的脚本不能.