好的,所以我将他们的任务存储在一个会话中:
Session::get('token', 'randomtokenstringhere');
在每种表单上,无论是否成功,我都会生成一个新令牌,并更新其会话令牌,例如说
user 1
位于更新配置文件页面上,然后我序列化一个表单,页面加载上的令牌会回显该令牌变量),然后他们提交运行ajax的表单,该表单要么完成要么出现错误,我的系统生成一个新令牌,但是现在在编辑配置文件页面上,他们仍在使用旧令牌,因此现在他们的令牌将永不匹配。如何解决此问题以提高安全性?
这是我的ajax的一个例子:
<!-- accept, reject, add and cancel friend requests -->
$('.add_friend').click(function(event) { // bind function to submit event of form
event.preventDefault();
$.ajax({
url: $(this).attr('href'),
success: function(responseText) {
if($(event.target).text() == 'Add as friend'){
$(event.target).attr("href", "<?php echo Config::get('URL'); ?>friends/cancel_request/" + $(event.target).attr('id') + "/<?php echo System::escape(Session::get('token')); ?>");
$(event.target).text('Cancel Request');
$(event.target).removeClass("add_friend btn btn-success").addClass("cancel_request btn btn-info");
}else{
$(event.target).attr("href", "<?php echo Config::get('URL'); ?>friends/addfriend/" + $(event.target).attr('id') + "/<?php echo System::escape(Session::get('token'));?>");
$(event.target).text('Add as friend');
$(event.target).removeClass("cancel_request btn btn-info").addClass("add_friend btn btn-success");
}
}
});
return false;
});
<!-- End Like a status -->
当然,哪个运行以下链接:
<a class="add_friend btn btn-success" id="<?php echo System::escape($likes->timeline_likes_id); ?>" href="<?php echo Config::get('URL'); ?>friends/addfriend/<?php echo System::escape($likes->user_id).'/'.System::escape(Session::get('token')); ?>"><?php echo System::translate("Add as friend"); ?></a>
他们的令牌是:
System::escape(Session::get('token')); ?>
仅在页面刷新时加载,这不符合我使用ajax的原因 最佳答案
要更新javascript中的值,您需要进行一些修改。
这样的事情应该可以让您走上正轨
<!-- accept, reject, add and cancel friend requests -->
$('.add_friend').click(function(event) { // bind function to submit event of form
event.preventDefault();
var token = <?php echo System::escape(Session::get('token'));?>;
$.ajax({
url: $(this).attr('href'),
success: function(responseText) {
if($(event.target).text() == 'Add as friend'){
$(event.target).attr("href", "<?php echo Config::get('URL'); ?>friends/cancel_request/" + $(event.target).attr('id') + "/" + token);
$(event.target).text('Cancel Request');
$(event.target).removeClass("add_friend btn btn-success").addClass("cancel_request btn btn-info");
}else{
$(event.target).attr("href", "<?php echo Config::get('URL'); ?>friends/addfriend/" + $(event.target).attr('id') + "/" + token);
$(event.target).text('Add as friend');
$(event.target).removeClass("cancel_request btn btn-info").addClass("add_friend btn btn-success");
}
token = responseText;
}
});
return false;
});
<!-- End Like a status -->
现在,您要做的就是在
$(this).attr('href')
处修改表单处理程序以回显新的会话令牌。 JS会将令牌值设置为新令牌,并在后续请求中使用它。这样做是将令牌放置在一个变量中,该变量可以在每次调用后进行更新,以便您可以在成功请求后对其进行更改。
关于javascript - 我正在通过jquery字符串发送跨站点伪造 token ,但是在下一页上,我将生成一个新 token ,然后它们的 token 将永远不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32235715/