为什么跨域AJAX请求被标记为"安全风险"?

kik*_*ito 4 javascript xss ajax json cross-domain

默认情况下,浏览器不允许跨站点AJAX请求.

我知道,一个设想不当的跨域请求可能会带来安全风险.如果我使用外部网站的html或javascript并将其"渲染"到我的网站,那就是一个问题.该外部代码可用于许多不良事情 - 例如访问当前用户的会话数据.

但是,如果我只请求JSON或XML数据,并且我使用适当的库来解析JSON(而不仅仅是使用eval),我无法想象这将是一个安全风险.可能发生的更糟糕的是来自该站点的内容无法正确呈现.

我错过了什么吗?是否可以通过发送某种恶意数据来破坏读取json/xml的页面?

Que*_*tin 12

风险不是发出请求的网站.

例如:

  1. 爱丽丝访问她的银行并登录.
  2. 然后她访问了Evil Site.
  3. Evil Site使用JavaScript导致Alice的浏览器向Her Bank提出请求
  4. 她的银行用Alice的帐户详细信息回复并将其传递给JavaScript
  5. JavaScript然后将它们传递给Evil Site的控制器

简而言之 - 它可以防止攻击者从Alice拥有凭据的任何站点(以及防火墙后面的站点,例如Alice的企业Intranet)读取私有数据.

请注意,这不会阻止不依赖于从站点读取数据的攻击(CSRF),但如果没有同源策略,对CSRF的标准防御很容易被破坏.