php每次请求制造一个token,php csrf问题,一个请求生成一个csrf key token,但是界面用了两个POST?汗血宝马...

bVISG0?w=380&h=348

登录和注册放在一起了,但是一个请求只有一份csrf的key和token,这里会有两个POST,那这个怎么办呢?

我想到的是,分开或者一个成功后刷新页面

没关系的呀,审核的csrf_token 都是session给的,我懂了,您的

csrf_token

是 放表单里的对吧,您可以放在

meta

标签里呀,通过

ajax

提交表单。或者甩在

form

外面每次异步提交就无所谓了,渲染视图的时候放在

meta

标签里或者丢出去,异步提交的时候抓回来丢到后端就可以了

$.request('post','/reg',{});

$.extend({

/**

* $.ajax请求的封装

*

* @usage return $.request("post", url, {}).done(function(responce) {}).fail(function() {});

* @usage return $.request("post", url, null).then(function(responce) {});

*

* @param {[type]} method   [POST/GET]

* @param {[type]} url      [请求URL]

* @param {[type]} data     [传递的数据]

* @param {[type]} userOpts [自定义参数: {headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}}]

*

* @return {[type]} [description]

*/

request: function(method, url, data, userOpts) {

var defer, options;

defer = $.Deferred();

options = $.extend({

method: method,

url: url,

dataType: "json",

async: false,

data: data,

timeout: 3000,

cache: false,

headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') ? $('meta[name="csrf-token"]').attr('content') : ''},

beforeSend: function(msg) {

// 发送前的调试

}

}, userOpts);

$.ajax(options).done(function(data, textStatus, jqXHR) {

//return defer[(data.error ? "reject" : "resolve")](data);

return defer[(data.error ? "reject" : "resolve")](eval(data));

}).fail(function(jqXHR) {

window._hmt && window._hmt.push(['_trackEvent', 'AJAX_REQUEST_ERROR', 'error']);

return defer.reject();

});

return defer.promise();

}

});

后者靠谱。。。

这两个表单各自的隐藏域可以使用同一个csrf_token.

提交表单操作后,服务器端拿

$_POST['csrf_token']

$_COOKIE['csrf_token']

$_SESSION['csrf_token']

比对,一致则是合法提交.

表单隐藏域里的csrf_token

cookie或session里的csrf_token

都是随页面成对随机生成的.

因为其他人猜不到你的

$_COOKIE['csrf_token']

$_SESSION['csrf_token']

,所以能够防御请求伪造.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值