您的位置:首页 > Web前端 > JavaScript

同源策略

2017-05-04 12:51 169 查看

同源策略:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

为什么需要同源策略?
假设你登录一个网站服务器,同时在同一个浏览器访问其他恶意的站点时。如果没有同源策略,攻击者可以通过JavaScript获取你登录网站服务器上的信息等。如果我们登录的是个人银行账户,那么如果没有同源策略就会很危险。

根据上面对同源策略的说明,我么可以从其中知道:

a)不同域或同域:同域要求两个站点同协议,同域名,同端口。

b)客户端脚本:主要指JavaScript,客户端攻击主要是基于该脚本的。

c)授权:目标站点明确返回HTTP的响应头:“Access-Control-Allow-Origin:http://www.evil.com”。那么“www.evil.com”站点上的客户端就有权通过Ajax技术对目标站点上的数据进行读写操作。如果“Access-Control-Allow-Origin:*”:表示所有站点都可以对目标站点进行读写操作。

d)读写权限:document.cookie具备读写权限。

e)资源:只要是数据,就是资源。客户端安全威胁都是围绕这些资源进行的。

通过实例来说

html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

<html>  

<head>  

<meta http-equiv="content-type" content="text/html;charset=utf-8">  

  <title> 跨域测试 </title>  

  <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>  

 </head>  

 <body>  

    <div id="show"></div>  

    <script type="text/javascript">  

    $.post("http://www.server.com/server.php",{name:"fdipzone",gender:"male"})  

      .done(function(data){  

        document.getElementById("show").innerHTML = data.name + ' ' + data.gender;  

      });  

    </script>  

 </body>  

</html> 

php代码:

<?php  

$ret = array(  

    'name' => isset($_POST['name'])? $_POST['name'] : '',  

    'gender' => isset($_POST['gender'])? $_POST['gender'] : ''  

);  

header('content-type:application:json;charset=utf8');  
header('Access-Control-Allow-Origin:*');     //允许跨域访问。    

echo json_encode($ret);  

?> 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息