扫码关注官方订阅号
登录和注册放在一起了,但是一个请求只有一份csrf的key和token,这里会有两个POST,那这个怎么办呢?我想到的是,分开或者一个成功后刷新页面
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
没关系的呀,审核的csrf_token 都是session给的,我懂了,您的csrf_token是 放表单里的对吧,您可以放在meta标签里呀,通过ajax提交表单。或者甩在form外面每次异步提交就无所谓了,渲染视图的时候放在meta标签里或者丢出去,异步提交的时候抓回来丢到后端就可以了
csrf_token
meta
ajax
form
$.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']比对,一致则是合法提交.
$_POST['csrf_token']
$_COOKIE['csrf_token']
$_SESSION['csrf_token']
表单隐藏域里的csrf_token和cookie或session里的csrf_token都是随页面成对随机生成的.
表单隐藏域里的csrf_token
cookie或session里的csrf_token
因为其他人猜不到你的$_COOKIE['csrf_token']或$_SESSION['csrf_token'],所以能够防御请求伪造.
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
没关系的呀,审核的csrf_token 都是session给的,我懂了,您的
csrf_token是 放表单里的对吧,您可以放在meta标签里呀,通过ajax提交表单。或者甩在form外面每次异步提交就无所谓了,渲染视图的时候放在meta标签里或者丢出去,异步提交的时候抓回来丢到后端就可以了后者靠谱。。。
这两个表单各自的隐藏域可以使用同一个csrf_token.
提交表单操作后,服务器端拿
$_POST['csrf_token']跟$_COOKIE['csrf_token']或$_SESSION['csrf_token']比对,一致则是合法提交.表单隐藏域里的csrf_token和cookie或session里的csrf_token都是随页面成对随机生成的.因为其他人猜不到你的
$_COOKIE['csrf_token']或$_SESSION['csrf_token'],所以能够防御请求伪造.