跨域访问
跨域是指跨域名的访问,以下情况都属于跨域:
跨域原因 | 示例 |
域名不同 | www.jd.com与www.taobao.com |
域名相同,端口不同 | www.jd.com:8080与www.jd.com:9090 |
二级域名不同 | item.jd.com与miaosha.jd.com |
www.jd.com/item www.jd.com/goods
为何禁止
不安全,容易出现CSRF攻击。
CSRF攻击
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。
CSRF 攻击的原理大致描述如下:有两个网站,其中A网站是真实受信任的网站,而B网站是危险网站。在用户登陆了受信任的A网站时,本地会存储A网站相关的Cookie,并且浏览器也维护这一个Session会话。这时,如果用户在没有登出A网站的情况下访问危险网站B,那么危险网站B就可以模拟发出一个对A网站的请求(跨域请求)对A网站进行操作,而在A网站的角度来看是并不知道请求是由B网站发出来的(Session和Cookie均为A网站的),这时便成功发动一次CSRF 攻击。
因而 CSRF 攻击可以简单理解为:攻击者盗用了你的身份,以你的名义发送请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账等等,造成的问题包括:个人隐私泄露以及财产安全。
因此,大多数浏览器都会跨域请求作出限制,这是从浏览器层面上的对 CSRF 攻击的一种防御,但是需要注意的是在复杂的网络环境中借助浏览器来防御 CSRF 攻击并不足够,还需要从服务端或者客户端方面入手防御
如何打开
语法:add_header name value [always];
默认:-
上下文:http,server,location,if in location
# 一般name为Access-Control-Allow-Origin
演示
以下为演示ajax进行跨域访问的html。
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>测试跨域访问</title>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type:"GET",
url:"http://192.168.56.113/index.html",
success:function(data){
alert("success");
},
error:function(){
alert("fail!!");
}
});
});
</script>
<body>
<h1>测试跨域访问</h1>
</body>
</html>
下面配置Nginx的跨域访问。
# 配置在192.168.56.113这个服务器上
location / {
root /usr/share/nginx/html;
add_header Access-Control-Allow-Origin http://192.168.56.112;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
index index.html index.htm;
}
版权属于:带翅膀的猫
本文链接:https://chengpengper.cn/archives/127/
转载时须注明出处及本声明
不错不错,我喜欢看 www.jiwenlaw.com
看的我热血沸腾啊www.jiwenlaw.com
666
测试邮箱
测试邮箱
测试