司开星的博客

浅谈XSS、CSRF、SOP(同源策略)的关系

简单列一下三者关系方便理解,具体细节理解后再参考其他资料。

简介

SOP

浏览器的同源策略,依赖浏览器本身实现,一般浏览器都有这个策略。

  • 要保护的数据:可信网站的用户数据(如登录后的cookie等)
  • 怎么保护:在恶意网站不能AJAX请求可信网站(不同域不能直接请求,防止携带可信网站cookie后黑客网站拿到用户数据);在恶意网站虽然可以通过<script>等标签可以引用可信网站资源,但不允许读取返回的数据。
  • 怎么绕过:JSONP(本网站引用可信网站数据前写好回调函数,调用时带参数告诉可信网站,可信网站返回的js数据包含调用回调函数的逻辑。即需要可信网站配合主动写JS回调);可信网站设置Access-Control-Allow-Origin以说明此链接允许哪些第三方网站请求(即CORS)。

CSRF

跨站请求伪造,重点是“在恶意网站伪造用户在可信网站的操作”。

  • 要保护的数据:对可信网站的用户数据的操作(如操作发送一个请求删除用户数据)
  • 怎么攻击:在恶意网站向可信网站发送请求,如果能触发恶意操作则是CSRF攻击。
  • 怎么防范:CSRF Token

XSS

跨站脚本攻击,重点是“在用户浏览的可信网站中注入JS以实施攻击”

  • 要保护的数据:可信网站的用户数据
  • 怎么攻击:黑客通过可信网站存在XSS漏洞的留言板、构造包含脚本的可信网站链接等在可信网站注入JS,用户浏览时触发比如读取cookie并发送到恶意网站等功能。
  • 怎么防范:httponly(不允许JS读cookie,只允许浏览器发送);CSP(可信网站通过Content-Security-Policy说明本网站允许请求的第三方);

关系

为什么SOP不能防范CSRF

同源策略只阻止AJAX拿到请求响应结果,其实不阻止发送请求,所以如果黑客行为只要发送就能完成那就不受sop限制,sop本质上是防止黑客网站拿到可信网站数据。

为什么XSS不受SOP限制能往恶意网站发数据

只要恶意网站主动设置了Access-Control-Allow-Origin,则可以不受限制的接收可信网站的请求。