跨域请求方法及安全问题

跨域请求方式

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

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

然后通过回调函数callbackFunction处理返回

ajax调用方式:

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

2、如果想使用 post 方式则需要在服务器端加允许跨域请求 header("Access-Control-Allow-Origin:*"); 然后 ajax 请求中

 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实现

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

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

转载于:https://my.oschina.net/u/347414/blog/1528604

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值