1. 概念
1.1. CSRF
CSRF(Cross-site request forgery) 跨站请求伪造,即一个网站中包含多个网站域名时,恶意网站网站请求会伪造用户(使用用户的cookies,session)去访问目标网站,危害较大,浏览器默认禁止。
1.2. Nginx实现跨站访问的方式
- 使用反向代理到其它网站时,nginx会自动在response中添加 Access-Control-Allow-Origin 信息,浏览器解析后会允许到该站点的请求
- 使用add_header将Access-Control-Allow-Origin添加到响应头部
2. 案例
2.1. 直接访问
[root@centos-81 ~]# cat /usr/share/nginx/html/csrf.html ## 测试页
<html>
<head>
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script>
$(document).ready(function(){
$.ajax({
type:"GET",
url:"http://192.168.1.50/api/test.html",
success:function(data){
alert("success!")
},
error:function (e) {
alert("failed!")
}
});
});
</script>
</head>
<h2> CSRF TEST </h2>
</html>
2.2. 使用反向代理
[root@centos-81 ~]# sed -i ‘s/192.168.1.50/192.168.1.81/‘ /usr/share/nginx/html/csrf.html
[root@centos-81 ~]# cat /etc/nginx/conf.d/localhost.conf
location ~ ^/api/.* {
proxy_pass http://192.168.1.50 ;
}
2.3. 使用add_header
[root@centos-81 ~]# sed -i ‘s/192.168.1.81/192.168.1.50/‘ /usr/share/nginx/html/csrf.html
[root@centos-50 html]# cat /usr/local/nginx/conf/nginx.conf ## 在192.168.1.81添加是没用的
server {
listen 80;
server_name localhost;
add_header Access-Control-Allow-Origin http://192.168.1.81 ;
add_header Access-Control-Allow-Methods GET,POST,PUT,HEAD ;