Rog*_*ger 0 php security ajax jquery
我试图找到一种方法来过滤ajax调用,以便为我的应用程序添加一个很好的安全层.代码是否有任何意义?
function is_ajax(){//Help Secure Ajax Calls
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest') return;
else die;//no ajax
}
Run Code Online (Sandbox Code Playgroud)
我的梦想只是让我的服务器(htm或php)中的文件通过ajax访问另一个php文件.
我想知道下面的代码是否会做得更好:
if(strpos($_SERVER['REQUEST_URI'],'http://')) die;//Help Secure From URL Include Attacks
Run Code Online (Sandbox Code Playgroud)
谢谢.
由于AJAX调用始终来自浏览器,因此请求不是来自您自己的服务器,而是来自客户端计算机.即使您设置了自定义标头,也可以在客户端轻松操作这些标头.
如果您的目标是仅允许自己的脚本访问包含ajax内容的脚本,我建议生成一个仅对某个请求的URL和指定时间有效的令牌字符串.
$secret ="ABC1232";
$item = array(
"time"=>time(),
"token_id"=>"<page_url>"
);
$signed = base64_encode(hash_hmac("sha256",json_encode($item),$secret));
$item = base64_encode(json_encode($item));
$ajax_url = "myscript.php?signed=$signed&item=$item";
Run Code Online (Sandbox Code Playgroud)
$item = json_decode(base64_decode($_REQUEST["item"]));
$timeout = 3600;
if($item->time < (time()-$timeout)){
die("Invalid token - timeout");
}
if($item->token_id !== "<page_url>"){
die("Invalid token - page url");
}
$secret ="ABC1232";
$valid = ($_REQUEST["signed"] === base64_encode(hash_hmac("sha256",json_encode($item),$secret));
if(!$valid){
die("Invalid token");
}
Run Code Online (Sandbox Code Playgroud)