我今天有一个安全问题。我使用jQuery将Ajax实现到我的应用程序中。我实际上是在每个页面加载时生成一个令牌,该令牌将被设置为$_SESSION
,并且它将被发送到$.ajax()
请求。在服务器端,我要验证发送的$_POST
令牌是否等于$_SESSION
令牌。
这是html部分:
<html>
<head>
<script src="js/jquery-1.10.min.js"></script>
$(document).ready(function(){
"use strict";
<?php
$token = md5(rand(5000,500000));
$_SESSION['token'] = $token;
?>
SomeFunction.init("<?php echo $token; ?>");
});
</script>
</head>
<body></body>
</html>
因此,这将基本上设置页面加载的$ token eac htime。但是,如果我的页面确实有多个Ajax请求怎么办?或者只是一个,这没关系。如果当前用户知道令牌(通过查看源代码),那么他可以用它发送格式错误的请求,如果他在此期间没有重新加载页面。
基本上,只要他愿意,他就会拥有令牌,他可以根据需要发送尽可能多的格式错误的Ajax请求。
如何防御这类攻击?我应该在每个Ajax请求上重新生成令牌吗?如果没有重新加载页面,这怎么可能呢?应该为每个Ajax请求返回一个新的标记值?或者最佳做法是什么?