跨站和跨域的关系与区别
- 跨站 not samesite:两个域名不属于同站(域名-主机名/IP相同,协议相同)。
- 跨域:两个域名不属于同源(域名-主机名/IP相同,端口号相同,协议相同)。
Cookie 的同源主要用于防止CRSF,Cookie的校验较宽松,Cookie只关注域名,忽略协议和端口,只要两个 URL 的 eTLD+1 相同即可【顶级域名+1】,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public Suffix List)中,例如,.com、.co、.uk、.github.io 等。而 eTLD+1 则表示,有效顶级域名+二级域名,例如taobao.com等。
- www.taobao.com 和 www.baidu.com 是跨站
- www.a.taobao.com 和 www.b.taobao.com 是同站
- a.github.io和b.github.io是跨站 【这一这个github.io 是有效顶级域名】
所以跨站即:两个URL顶级域名和二级域名不同就是跨站(也称第三方(Third-party)),相同则是同站本方(First-party)
跨站"(Cross-Site)和"跨域"(Cross-Origin)是两个不同的概念,尽管它们经常被混淆。以下是它们的区别:
-
跨站(Cross-Site):
- "跨站"通常用于描述涉及到网站的安全和隔离的问题。例如,跨站脚本攻击(Cross-Site Scripting,XSS)和跨站请求伪造(Cross-Site Request Forgery,CSRF)都属于跨站安全问题。
- XSS 是一种攻击方式,攻击者通过注入恶意脚本(通常是 JavaScript)到网页中,然后在用户浏览器中执行这些脚本,从而获取用户的信息或进行其他恶意操作。
- CSRF 是一种攻击方式,攻击者通过诱使用户在已经登录的情况下执行一些操作,从而在用户不知情的情况下执行恶意操作,如改变密码或进行支付。
-
跨域(Cross-Origin):
- "跨域"通常用于描述在Web开发中,由于浏览器的同源策略(Same-Origin Policy)而导致的限制。同源策略是浏览器出于安全考虑而实施的一项策略,它限制一个网页从一个源加载的文档或脚本如何与来自另一个源的资源进行交互。
- 跨域问题出现在一个网页的脚本试图访问另一个域下的资源,例如通过 AJAX 请求加载数据或通过
<script>
标签引入远程脚本。 - 解决跨域问题的常见方法包括使用JSONP(已经在之前的回答中提到)、CORS(Cross-Origin Resource Sharing)以及在服务器端设置适当的头部。