searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

同源策略(SOP)与跨源资源共享(CORS)

2024-10-14 09:40:16
11
0

同源策略

同源策略(Same-Origin Policy, SOP) 是一种Web浏览器的安全机制,旨在防止不同来源的恶意网页相互访问用户的敏感数据,以保护用户的隐私和安全。同源的概念基于以下三个要素:

  1. 协议​(如 httphttps
  2. 域名​(如 example.com
  3. 端口​(如 80443

同源策略规定,只有当两个URL的协议、域名、以及端口号完全相同时,它们才被视为相同源(Same-Origin),并可以互相访问资源。这一机制主要限制了JavaScript代码和文档对象模型(DOM)的跨源交互。

XHR的同源策略

XMLHttpRequest(XHR) 是一种用于在客户端与服务器之间进行数据通信的API。XHR同源策略规定,页面只能向与其相同源的服务器发送请求并接收响应。假如一个网页在 example.com 上运行,它只能通过XHR请求访问该域的数据,而不能请求其他域名下的资源。

举例来说:

  • 允许​:从 example.com/page 发送请求到 example.com/api
  • 不允许​:从 example.com/page 发送请求到 another-domain.com/api

Cookie的同源策略

Cookie 也是同源策略的关键组成部分。当一个网页在浏览器中设置了Cookie,这个Cookie只能被同源的页面访问。这意味着只有具有相同协议、域名和端口的页面才能读取或发送这些Cookie,防止跨站点的Cookie劫持或滥用。

XHR与Cookie的同源策略差异

对于子域名,同源策略在XHR和Cookie处理上有所不同:

  • XHR限制严格​:子域名无法通过XHR访问父域名的资源,反之亦然。
  • Cookie共享​:Cookie默认可以在父域名和子域名之间共享。例如, example.com 的Cookie可以在 sub.example.com 中使用,前提是Cookie的 Domain 属性已正确设置。

CORS(跨源资源共享)

跨源资源共享(Cross-Origin Resource Sharing, CORS) 是一种允许浏览器从不同源请求资源的机制。它通过服务器配置的HTTP头部来明确声明哪些域名能够访问其资源,从而打破了同源策略的限制。

CORS的关键头部

CORS机制通过在请求和响应中添加特定的HTTP头部来管理跨源请求。以下是一些重要的CORS相关头部:

  • Origin​:标识发起请求的来源(浏览器会自动添加)。
  • Access-Control-Allow-Origin​:指定哪些源被允许访问资源。例如,可以设为特定域名或者通配符 *,以允许所有域请求。
  • Access-Control-Allow-Methods​:定义被允许的HTTP请求方法,如 GETPOSTDELETE 等。
  • Access-Control-Allow-Headers​:列出允许客户端使用的自定义请求头部。
  • Access-Control-Expose-Headers​:指定哪些头部可以在客户端代码中访问到。

简单请求(Simple Request)

CORS定义了一种特殊情况——​简单请求​,浏览器可以不进行预检而直接发送请求。满足以下条件的请求通常被视为简单请求:

  1. 使用的HTTP方法是 GETPOSTHEAD
  2. 请求头中只包括安全的头部,如 AcceptContent-Type(其值限定为 application/x-www-form-urlencodedmultipart/form-datatext/plain 等)。

如果请求不满足这些条件,浏览器将视其为​复杂请求​,并首先发送预检请求。

CORS预检请求(Preflight Request)

对于​复杂请求​,浏览器在发送实际请求之前,会通过 OPTIONS 方法向目标服务器发出一个预检请求。该请求询问服务器是否允许跨源请求以及允许的请求方法、头部等。服务器收到预检请求后会返回一个响应,明确指出哪些操作被允许,浏览器根据这些信息决定是否继续发送实际请求。

CORS的安全性

尽管CORS提供了跨源请求的便利性,但如果不正确配置,可能会导致安全隐患。特别是,如果服务器随意允许所有来源访问,可能会使应用程序暴露在跨站点请求伪造(CSRF)或其他攻击之下。因此,服务器在响应中应严格指定允许的源、方法和头部,并小心处理允许跨源请求的资源类型,确保不引发敏感数据泄露问题。

总结

同源策略和CORS是Web安全的核心机制之一。通过同源策略,浏览器可以有效限制跨源请求和数据访问,防止恶意网页窃取敏感信息。而CORS提供了一种合法打破同源限制的方式,允许不同域之间安全、受控地共享资源。然而,CORS的使用需谨慎配置,以避免潜在的安全问题。

0条评论
0 / 1000
方****轶
2文章数
1粉丝数
方****轶
2 文章 | 1 粉丝
方****轶
2文章数
1粉丝数
方****轶
2 文章 | 1 粉丝
原创

同源策略(SOP)与跨源资源共享(CORS)

2024-10-14 09:40:16
11
0

同源策略

同源策略(Same-Origin Policy, SOP) 是一种Web浏览器的安全机制,旨在防止不同来源的恶意网页相互访问用户的敏感数据,以保护用户的隐私和安全。同源的概念基于以下三个要素:

  1. 协议​(如 httphttps
  2. 域名​(如 example.com
  3. 端口​(如 80443

同源策略规定,只有当两个URL的协议、域名、以及端口号完全相同时,它们才被视为相同源(Same-Origin),并可以互相访问资源。这一机制主要限制了JavaScript代码和文档对象模型(DOM)的跨源交互。

XHR的同源策略

XMLHttpRequest(XHR) 是一种用于在客户端与服务器之间进行数据通信的API。XHR同源策略规定,页面只能向与其相同源的服务器发送请求并接收响应。假如一个网页在 example.com 上运行,它只能通过XHR请求访问该域的数据,而不能请求其他域名下的资源。

举例来说:

  • 允许​:从 example.com/page 发送请求到 example.com/api
  • 不允许​:从 example.com/page 发送请求到 another-domain.com/api

Cookie的同源策略

Cookie 也是同源策略的关键组成部分。当一个网页在浏览器中设置了Cookie,这个Cookie只能被同源的页面访问。这意味着只有具有相同协议、域名和端口的页面才能读取或发送这些Cookie,防止跨站点的Cookie劫持或滥用。

XHR与Cookie的同源策略差异

对于子域名,同源策略在XHR和Cookie处理上有所不同:

  • XHR限制严格​:子域名无法通过XHR访问父域名的资源,反之亦然。
  • Cookie共享​:Cookie默认可以在父域名和子域名之间共享。例如, example.com 的Cookie可以在 sub.example.com 中使用,前提是Cookie的 Domain 属性已正确设置。

CORS(跨源资源共享)

跨源资源共享(Cross-Origin Resource Sharing, CORS) 是一种允许浏览器从不同源请求资源的机制。它通过服务器配置的HTTP头部来明确声明哪些域名能够访问其资源,从而打破了同源策略的限制。

CORS的关键头部

CORS机制通过在请求和响应中添加特定的HTTP头部来管理跨源请求。以下是一些重要的CORS相关头部:

  • Origin​:标识发起请求的来源(浏览器会自动添加)。
  • Access-Control-Allow-Origin​:指定哪些源被允许访问资源。例如,可以设为特定域名或者通配符 *,以允许所有域请求。
  • Access-Control-Allow-Methods​:定义被允许的HTTP请求方法,如 GETPOSTDELETE 等。
  • Access-Control-Allow-Headers​:列出允许客户端使用的自定义请求头部。
  • Access-Control-Expose-Headers​:指定哪些头部可以在客户端代码中访问到。

简单请求(Simple Request)

CORS定义了一种特殊情况——​简单请求​,浏览器可以不进行预检而直接发送请求。满足以下条件的请求通常被视为简单请求:

  1. 使用的HTTP方法是 GETPOSTHEAD
  2. 请求头中只包括安全的头部,如 AcceptContent-Type(其值限定为 application/x-www-form-urlencodedmultipart/form-datatext/plain 等)。

如果请求不满足这些条件,浏览器将视其为​复杂请求​,并首先发送预检请求。

CORS预检请求(Preflight Request)

对于​复杂请求​,浏览器在发送实际请求之前,会通过 OPTIONS 方法向目标服务器发出一个预检请求。该请求询问服务器是否允许跨源请求以及允许的请求方法、头部等。服务器收到预检请求后会返回一个响应,明确指出哪些操作被允许,浏览器根据这些信息决定是否继续发送实际请求。

CORS的安全性

尽管CORS提供了跨源请求的便利性,但如果不正确配置,可能会导致安全隐患。特别是,如果服务器随意允许所有来源访问,可能会使应用程序暴露在跨站点请求伪造(CSRF)或其他攻击之下。因此,服务器在响应中应严格指定允许的源、方法和头部,并小心处理允许跨源请求的资源类型,确保不引发敏感数据泄露问题。

总结

同源策略和CORS是Web安全的核心机制之一。通过同源策略,浏览器可以有效限制跨源请求和数据访问,防止恶意网页窃取敏感信息。而CORS提供了一种合法打破同源限制的方式,允许不同域之间安全、受控地共享资源。然而,CORS的使用需谨慎配置,以避免潜在的安全问题。

文章来自个人专栏
web知识
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0