同源策略

来源:互联网 发布:unity3d跑酷游戏教程 编辑:程序博客网 时间:2024/06/18 04:01

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

为什么需要同源策略?
假设你登录一个网站服务器,同时在同一个浏览器访问其他恶意的站点时。如果没有同源策略,攻击者可以通过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);  
?> 

0 0