跨域访问

      跨域是指跨域名的访问,以下情况都属于跨域:

跨域原因 示例
域名不同 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;
}

请输入图片描述

Last modification:December 21st, 2020 at 11:34 pm
如果觉得我的文章对你有用,请随意赞赏