Javascript SOP(同一原产地政策)的含义

Javascript SOP(同一原产地政策)的含义,javascript,jsonp,same-origin-policy,Javascript,Jsonp,Same Origin Policy,SOP(同一原产地政策)的真正含义是什么 我知道这意味着一个来源的Javascript代码不能从另一个来源获得资源。但是“资源”这个词到底是什么意思呢?例如: Javascript代码可以从另一个站点访问图像 Javascript代码无法向另一方发出ajax请求 但是当您使用JSON填充时,在完成填充脚本标记的加载之后,第三方脚本将调用您指定的回调——一个站点的Javascript代码正在调用另一个站点的Javascript代码方法。这是否违反了SOP?有几种类型,但如果我们没有指定: SOP指

SOP(同一原产地政策)的真正含义是什么

我知道这意味着一个来源的Javascript代码不能从另一个来源获得资源。但是“资源”这个词到底是什么意思呢?例如:

  • Javascript代码可以从另一个站点访问图像
  • Javascript代码无法向另一方发出ajax请求
    但是当您使用JSON填充时,在完成填充脚本标记的加载之后,第三方脚本将调用您指定的回调——一个站点的Javascript代码正在调用另一个站点的Javascript代码方法。这是否违反了SOP?

    有几种类型,但如果我们没有指定:

    SOP指的是一种机制,它控制JavaScript和其他脚本语言跨域访问DOM属性和方法的能力


    你对不同类型的SOP有很好的描述

    JSONP通过向DOM动态添加一个脚本标记并调用一个预定义的函数,将远程web服务的JSON数据作为参数,从而绕过同源策略。标记不受同一来源策略的约束,因此可以跨域请求内容


    就像您可以在不违反SOP的情况下在站点上使用Google版本的一样,您可以“包括”一个脚本标记,该标记对从web服务接收回来的数据调用预定义函数。

    同源策略主要用于防止其他域的脚本执行AJAX(XMLHTTP)在加载域的上下文中请求,并限制其他域的站点访问站点资源,如Cookie、本地存储等。这更像是为安全措施制定的标准规范,每个浏览器都有自己的实现方式,遵守规范。

    我说的“阻止其他域的脚本执行AJAX(XMLHTTP)请求”是指不属于同一域的跨源请求

    例如,domain.com和test.domain.com属于同一个域,测试是子域,而test.domain2.com属于完全不同的域

    现在让我们考虑它的安全含义:-< /P> 1.假设一个网站site1.com有一个API调用来更新密码。当用户输入所需数据时,会向后端进行HTTP调用,并使用cookie中包含的会话数据验证用户的真实性

    2) 话虽如此,如果攻击者创建了一个名为site2的站点,并使用javascript代码对site1的更改密码端点进行HTTP调用。默认情况下,它会将site1的所有cookie数据附加到请求,从而使HTTP调用成功,从而允许攻击者成功

    3) 为了缓解这种情况,浏览器实施了SOP,该SOP指示浏览器javascript引擎阻止任何跨域请求,例如从site2到site1的请求,除非指示允许这样做

    4) 现在,在这个拥有微服务体系结构和多个子域的不断发展的现代世界中,这将是一个非常有问题的问题。为了避免这种情况,如果API响应使用诸如Access Control Allow origin、Access Control Allow Methods、Access Control Allow Credentials等标题,那么浏览器支持跨源请求

    5) 当ajax请求从site2发送到site1时,浏览器会检查API响应头,如果响应中存在以下任何值,则允许请求:- 访问控制允许原点:*或访问控制允许原点:site2.com或访问控制允许原点:*.site2.com(通配符条目)

    6) 尽管如此,这里存在一个主要漏洞,即使sop策略阻止了请求,实际上也意味着浏览器阻止site2访问以读取响应数据,这意味着请求已经向服务器发出。此场景仅适用于特定条件下的少数请求,这些条件不会触发飞行前选项调用。进行选项调用时,浏览器将不允许根据选项调用中的标题响应通过请求

    7) 现在是第二部分,即访问控制允许凭据。在选项调用的服务器响应中,如果服务器将所有机密会话数据(如授权标头)的标头设置为true,则安全cookie将添加到从site2到site1的跨源请求中

    注意:-仅当访问控制允许来源非常特定于域时,才添加此标头,这意味着它将不适用于标头中的*值。是Access Control Allow Origin标头是*如果Access Control Allow Credentials设置为true,则浏览器SOP策略将启动并阻止其允许安全数据。

    SOP源策略不处理图像源和外部脚本。为了能够通过内容安全策略(CSP)对其进行控制。使用它,您可以控制对外部站点的访问,包括图像、脚本、字体、样式等。您还可以阻止站点中不安全的内联评估,如警报框,以防止某些XSS攻击。这是一个新的事实标准,许多网站开始实施它

    为了能够防止此类攻击(CSRF攻击),网站还实现了一个CSRF令牌以及一个在每次状态更改时都会更改的表单。即使攻击者以某种方式从site2向site1发出请求,该请求也不会通过,因为site1的服务器将验证csrf令牌以及该请求,而攻击者无法通过该请求进行访问。 如果存在来源标题,其他度量将添加基于来源的验证

    JSONP旨在通过回调实现这种机制

    很抱歉回答了这么长的问题,而且话题远不止这个。这只是我自己对它的理解,如果我有任何地方错了,请告诉我。