跨域请求方式
1、jsonp 是json 的一种使用方式, 跨域是通过javascript 方式实现,而不是 xhr; request_method 始终是get方式; JSONP是基于JSON格式的为解决跨域请求资源而产生的解决方案。它的基本原理是利用HTML的元素标签,远程调用JSON文件来实现数据传递。本文将梳理JSONP实现过程中的安全攻防。
然后通过回调函数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防御, 例如通过
限制Referer+部署随机token实现
关键性的操作一律使用POST方式提交数据,同时在表单和服务端session中都要存放token用户数据提交过来之后检查所提交的token是否和服务端存放的token一致,若不一致,则应视为发生了CSRF攻击,该次请求无效。
在服务器和浏览器端都实现了利用origin字段的方法来防止CSRF攻击