内容简介:为什么会出现跨域问题?浏览器基于同源策略做出的限制。同源策略是什么?
为什么会出现跨域问题?
浏览器基于同源策略做出的限制。
同源策略是什么?
同源策略限制了从 同一个源 加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的 重要安全机制 。
同一个源是如何定义的?
两个页面具有相同协议(http,https),相同端口,相同域名。
下表给出了相对 http://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
|
失败 | 不同协议 ( https和http ) |
http://store.company.com:81/dir/etc.html
|
失败 | 不同端口 ( http:// 80是默认的) |
http://news.company.com/dir/other.html
|
失败 | 不同域名 ( news和store ) |
同源策略中的安全机制的应用场景是什么?
- CSRF(跨站请求伪造)
- 点击劫持
CSRF 是什么?
CSRF(跨站点请求伪造)是一种冒充受信任用户并发送网站不需要的命令的攻击。P.S:还有一个类似的攻击叫XSS(跨网站脚本)攻击。
点击劫持 是什么?
点击劫持,clickjacking,也被称为UI-覆盖攻击。这个词首次出现在2008年,是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼首创的。
它是通过覆盖不可见的框架误导受害者点击。
虽然受害者点击的是他所看到的网页,但其实他所点击的是被攻击者精心构建的另一个置于原网页上面的透明页面。
这种攻击利用了HTML中标签的透明属性。
如何解决
关于跨域的背景介绍就到这里告一段落了,有兴趣的朋友可以延伸阅读关于 CSRF 攻击,点击劫持,XSS攻击等相关知识点。文末会给出一些参考资料。下面我们继续来看看如何解决跨域问题。
JSONP
首先,在HTML中,有一些标签是不受跨域影响的,例如:script,img,iframe 等标签。而JSONP 方式实现跨域请求就是利用了上述的 script 标签。实现原理简单的说就是:通过动态创建 script 标签,利用 script 中的 src 不受同源策略限制的特性来跨域获取数据。具体示例代码网上很多,这里我就不贴了,**比较关键的点是 callback 的名称的前后端统一。** 另外,JSONP只能发送GET请求。
iframe+form
可以实现post的跨域请求。其实现原理也是通过iframe 标签的不受跨域影响+form表单的post提交方式而实现的。
document.domain
例如:www.baidu.com 可以通过设置document.domain="baidu.com" 访问其父域 baidu.com.
使用 document.domain 来允许子域安全访问其父域时,您需要在父域和子域中设置 document.domain 为相同的值。这是必要的,即使这样做只是将父域设置回其原始值。不这样做可能会导致权限错误。
P.S: baidu.com 为一级域名,带前缀 www 的www.baidu.com 为二级域名。
CORS
CORS 是在同源策略中建议的,标准的跨域方式,它通过额外的Http Header 来告诉浏览器在一个源(域)上运行的Web应用程序有权从不同来源的服务器访问所选资源。
CORS 实现的方式主要是后端设置 Access-Control-Allow-Origin:*
,通过CORS实现跨域访问,基本上和前端没有关系了,前端请求和平常几乎一样。 P.S:IE10 以下不支持CORS。
关于CORS中的简单请求,非简单请求等更详细的信息,可以看看 阮一峰-跨域资源共享 CORS 详解
Nginx代理
前端请求代理服务器,代理将请求转发到真正的后端域名上。这种方式和CORS 的指定允许某个域名访问的方式是一样的,不过好处是保护了真正的后端域名。
总结
如果遇到了跨域问题不要慌,首先检查前端服务和所请求的资源是否是同一个域, 如果不是同一个域则按照上述方式和后端进行沟通,解决跨域问题。然后根据项目的实际需要来选择跨域方式,如客户端能保证支持IE10以上,建议使用后2种方式实现跨域访问。
跨域的问题其实不难,难的是后面所涉及到的各种Web攻击方式和防范策略。在了解跨域的同时,了解这些Web 安全防范策略才是真正的理解了跨域这件事情。
关于Web 安全的问题,可以参考我 的这篇文章:「译」Web 安全高级主题。
最后,感谢阅读!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 前端科普系列(三):CommonJS 不是前端却革命了前端
- 前端科普系列(三):CommonJS 不是前端却革命了前端
- 前端技术演进(三):前端安全
- 【前端优化】前端常见性能优化
- 【前端学习笔记】前端安全详解
- 前端监控和前端埋点
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Usability for the Web
Tom Brinck、Darren Gergle、Scott D. Wood / Morgan Kaufmann / 2001-10-15 / USD 65.95
Every stage in the design of a new web site is an opportunity to meet or miss deadlines and budgetary goals. Every stage is an opportunity to boost or undercut the site's usability. Thi......一起来看看 《Usability for the Web》 这本书的介绍吧!