源(origin): <protocol, domain, port>
- Protocol: http://, file://, ftp://
- Domain: microsoft.com, google.com
- Port: 80, 8080, 21, 3128, etc
(1)SOP 使用网站的源信息识别每个网站
(2)为每个源创建上下文,
资源存储在上下文中
(3)对每个源隔离,不同源客户端脚本在没有明确授权情况下,不能读写对方的资源
SOP功能
➢ 保护 cookie:cookie只会被提交给产生它的源
➢ 防止 JavaScript 访问 iframe 中的其他源的内容
SOP限制以下情形:
攻击者要访问www.myzoo.com的cookie,在攻击者页面创建iframe,将www.myzoo.com的页面放在iframe中,该iframe是攻击者页面的一部分,如果用户在未登出情况下访问了攻击者页面,那么用户的cookie会包含在iframe页面中,攻击者可使用js代码,通过iframe访问www.myzoo.com的cookie
➢ 防止 Ajax 跨域请求
➢ ….
安全和应用(跨域的需求)的折中: CORS
在 HTTP Header 中加入相应的头部
- Access-Control-Allow-Origin
- Access-Control-Request-Method
- Access-Control-Allow-Headers
- Access-Control-Allow-Credential:默认情况下Ajax跨越时不携带cookie。该头部要求Ajax携带cookie,同时要求在接收方设置允许接收Ajax携带的cookie
- …..
<?php header("Access-Control-Allow-Origin:*"); $myfile = fopen("test.txt","w") ; fwrite($myfile,$_GET["cookie"]); fclose($myfile); ?>