同源策略:不同域的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
为什么需要同源策略?
假设你登录一个网站服务器,同时在同一个浏览器访问其他恶意的站点时。如果没有同源策略,攻击者可以通过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); ?>
转载请注明原文地址: https://www.6miu.com/read-3088.html