我的网站上有一个页面,它向我建立的API发出了几个请求。 ajax请求提供了一些变量,API查询数据库并将正确的信息返回给请求页面。对于安全措施,我试图在ajax请求中使用php会话变量和http标头,以确保只有我的脚本可以从API请求信息。然而,我的结果不一致。
在请求页面上:
<?php
session_start();
$_SESSION['AUTHORIZE'] = md5(microtime().rand());
?>
<script>
var sessionAuthorize = "<?php echo $_SESSION['AUTHORIZE'];?>";
</script>
在我的请求来源的javascript文件中:
//sessionAuthorize is available in the function below
constructFilter:function(one,two){
$.ajax({
type:"GET",
beforeSend: function (request)
{
request.setRequestHeader("authorize", sessionAuthorize);
},
url: 'http://www.example.com/ajax_return.php?one='+one+'&two='+two,
success: function(data) {
//do some things
}
});
}
然后在我的PHP脚本ajax_return.php上,API:
session_start();
if(isset($_SERVER['HTTP_AUTHORIZE']) && isset($_SESSION['AUTHORIZE']) && $_SERVER['HTTP_AUTHORIZE'] == $_SESSION['AUTHORIZE'] ){
//do all my processing
}
else{
echo 'access denied!';
}
在我的php脚本中,我正在检查以确保两个变量确实已设置,然后如果它们是,则它们是否相互匹配。我得到了很多不一致的结果,虽然访问被拒绝&#34;过来。因此,在会话丢失或我检查它的逻辑有一些问题的方法中肯定存在一些缺陷。
我认为我有正确的身份验证计划,我只是有一些漏洞让它正常工作,或者我应该使用cookie或其他东西。