跨域请求方法及安全问题

跨域请求方式

一、jsonp 是json 的一种使用方式, 跨域是经过javascript 方式实现,而不是 xhr; request_method 始终是get方式; JSONP是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。本文将梳理JSONP实现过程当中的安全攻防。javascript

<script type="text/javascript" src="http://www.yiwuku.com/myService.aspx?jsonp=callbackFunction"></script>

而后经过回调函数callbackFunction处理返回java

ajax调用方式:ajax

$.ajax({
dataType:'jsonp',
data:'id=10',
jsonp:'jsonp_callback',
url:'http://www.yiwuku.com/getdata',
success:function(){
//dostuff
},
});

二、若是想使用 post 方式则须要在服务器端加容许跨域请求 header("Access-Control-Allow-Origin:*"); 而后 ajax 请求中json

crossDomain: true,
 dataType: 'json',

另若是返回中文乱码,需 js 加跨域

contentType: 'application/x-www-form-urlencoded;charset=UTF-8',

jsonp 安全问题

JSON劫持,CSRF(Cross-site request forgery跨站请求伪造)攻击范畴。 跨站请求伪造(cross site request forgery简称CSRF)是一种利用用户的身份对网站进行某种操做的漏洞,用户本身察觉不到这种操做,但操做请求是以用户的身份发出去的。网站是经过cookie来识别用户的,好比当用户成功在A网站进行身份验证以后浏览器就会获得一个标识其身份的cookie,只要不关闭浏览器或者退出登陆,之后访问这个A网站会带上这个cookie。若是这期间用户访问了某个不受信任的第三方站点B,而该站点包含了对A站点某个接口进行请求的代码,那么这个请求就会以用户的身份发出去,而用户本身并不知情。浏览器

危害:以用户的身份在用户不知情的状况下执行用户所不肯意执行的操做,好比:修改我的资料,修改管理密码,进行银行转帐,操纵用户恶意刷票等等安全

方案之一就是验证JSON文件调用的来源(Referer)。它主要利用<script>远程加载JSON文件时会发送Referer的机制,在网站输出JSON数据时,判断Referer是否包含在白名单内。 方案之二就是使用随机token防护, 例如经过http://r.qzone.qq.com/cgi-bin/tfriend/friend_show_qqfriends.cgi?uin=[QQ号]&g_tk=[随机token]输出JSON,但如此token可经过如下方式暴力循环破解:服务器

限制Referer+部署随机token实现cookie

关键性的操做一概使用POST方式提交数据,同时在表单和服务端session中都要存放token用户数据提交过来以后检查所提交的token是否和服务端存放的token一致,若不一致,则应视为发生了CSRF攻击,该次请求无效。session

在服务器和浏览器端都实现了利用origin字段的方法来防止CSRF攻击

相关文章
相关标签/搜索