最近在学习关于同源策略相关的知识( same origin policy
)。在阅读到阮一峰的相关文章后,看到一段这样的描述 原文地址
文中提到的:“设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?”
问题:假设没有同源策略,那么其他网站是通过什么方式怎样读取 A 的 cookie 呢?我没想明白?
最近在学习关于同源策略相关的知识( same origin policy
)。在阅读到阮一峰的相关文章后,看到一段这样的描述 原文地址
文中提到的:“设想这样一种情况:A网站是一家银行,用户登录以后,又去浏览其他网站。如果其他网站可以读取A网站的 Cookie,会发生什么?”
问题:假设没有同源策略,那么其他网站是通过什么方式怎样读取 A 的 cookie 呢?我没想明白?
风险:
如果没有同源策略(Same-Origin Policy),那么浏览器将不再限制一个源(域、协议和端口)的网页或脚本去访问或修改另一个源的资源。这将导致严重的安全风险,尤其是当涉及到用户敏感数据(如会话cookie、个人信息、账户凭证等)时。
其他网站如何读取A的cookie?
在没有同源策略的情况下,一个恶意的第三方网站(我们称之为B网站)可以通过多种方式尝试读取A网站的cookie。以下是几种可能的方法:
document.cookie
对象允许脚本读取(在某些情况下还可以写入)当前域下的cookie。结论:
同源策略是Web安全的一个基本组成部分,它有助于防止恶意网站访问和修改其他网站的数据。没有它,用户的隐私和安全将面临严重威胁。因此,开发人员应该始终遵循最佳实践来确保Web应用程序的安全性,并避免在可能的情况下放宽同源策略的限制。
很多人都会卡在 “其他网站是通过什么方式怎样读取 A 的 cookie 呢”
实际上,其他网站并不能读取到 A 的 Cookie,其他网站是利用了浏览器在发送请求时,会自动携带目标网站的 Cookie 的这样一个特性。
不过 Cookie 其实还有一个 SameSite 标记,在一定程度上可以避免这个问题。
前提有些搞错了,在没有 SOP 的情况下,或许可以通过其他答主提到了 iframe 来访问 document.cookie ,不过这样是访问不到 HttpOnly 的 Cookie 的,另外就是我实测下来,这个是 conentDocument 实际是 null,有些疑惑。
Chrome 的 --disable-web-security
在关闭所有实例,启用一个新的用户目录时,会提示这是一个无效的选项。
Firefox 在关闭了 strict origin policy 后也是 null
除了这个以外,还有对于 JS 的限制:
JavaScript 的 API 中,如 iframe.contentWindow、 window.parent、window.open 和 window.opener 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对 Window 和 Location 对象的访问添加限制,如下两节所述。
为了能让不同源中的文档进行交流,可以使用 window.postMessage。
不需要读取cookie。
如果没有同源策略,你可以在你的网站里 通过请求银行接口发起转账(假设没有U盾、验证码等验证)。
不类比银行,你可以类比任何网站的个人信息接口,没有同源策略,其他网站的cookie在你的域下发起的请求,也会带上。请求对方的个人信息接口,任何人访问你的站点,你都能获取到当前用户在其他网站的个人信息。比如qq空间、qq邮箱、网易邮箱等等等。
宽泛的说,任何“跨站”操作,都可以跟“同源”沾边,任何防止“跨站”的措施,都可以视为同源“策略”
8 回答5.9k 阅读✓ 已解决
9 回答9.3k 阅读
6 回答4.9k 阅读✓ 已解决
5 回答3.6k 阅读✓ 已解决
5 回答8k 阅读✓ 已解决
3 回答10.4k 阅读✓ 已解决
4 回答7.9k 阅读✓ 已解决
既然是做梦,为啥不大胆点?
所以既然都假设,没有同源策略这回事了,那么再大胆点猜测,
在这个没有同源策略世界里,浏览器设计的api肯定就不一样了,
比如,提供个
getAllCookie
的api啥的,就能拿到所有网站的cookie了.事实上,现在浏览器也能拿到不同网站cookie的,
比如下图,在设置页,只是没给你提供api而已
就算没有假象中的
getAllCookie
这个api,没有同源策略的话.直接在其他网站使用
iframe
打开个银行网站的网页,用iframe.contentWindow.document.cookie
不就拿到了?