同源策略是一个重要的安全策略, 它用于限制一个 origin 的文档或者它加载的脚本如何能与另一个源的资源进行交互. 它能帮助阻隔恶意文档, 减少可能被攻击的媒介.
同源的定义
如果两个 URL 的协议 (protocol), 主机(host), 端口(port, 如果有指定的话) 都相同的话, 则这两个 URL 是同源.
下表给出了与 URLhttp://store.company.com/dir/page.html 的源进行对比的示例:
URL | 结果 | 原因 |
---|---|---|
http:// store.company.com/dir2/other.html | 同源 | 只有路径不同 |
http:// store.company.com/dir/inner/another.html | 同源 | 只有路径不同 |
https:// store.company.com/secure.html | 失败 | 协议不同 |
http:// store.company.com:81/dir/etc.html | 失败 | 端口不同 (http:// 默认端口是 80) |
http:// news.company.com/dir/other.html | 失败 | 主机不同 |
如何允许跨源访问
可以使用 (Cross-Origin Resource Sharing, 跨域资源共享)来允许跨源访问. CORS 是 HTTP 的一部分, 它允许服务端来指定哪些主机可以从这个服务端加载资源.
如何阻止跨源访问
阻止跨域写操作, 只要检测请求中的一个不可推测的标记 (CSRF token) 即可, 这个标记被称为 Cross-Site Request Forgery (CSRF) 标记. 你必须使用这个标记来阻止页面的跨站读操作.
阻止资源的跨站读取, 需要保证该资源是不可嵌入的. 阻止嵌入行为是必须的, 因为嵌入资源通常向其暴露信息.
阻止跨站嵌入, 需要确保你的资源不能通过以上列出的可嵌入资源格式使用. 浏览器可能不会遵守 Content-Type 头部定义的类型. 例如, 如果您在 HTML 文档中指定 < script > 标记, 则浏览器将尝试将标签内部的 HTML 解析为 JavaScript. 当您的资源不是您网站的入口点时, 您还可以使用 CSRF 令牌来防止嵌入.
跨域资源共享
CORS (Cross-Origin Resource Sharing, 跨域资源共享) 是一个系统, 它由一系列传输的 HTTP 头组成, 这些 HTTP 头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应.
同源安全策略 默认阻止 "跨域" 获取资源. 但是 CORS 给了 web 服务器这样的权限, 即服务器可以选择, 允许跨域请求访问到它们的资源.
参考文献:
来源: http://www.bubuko.com/infodetail-3493966.html