gpt4 book ai didi

php - 禁止不需要的客户端请求使用 PHP 文件

转载 作者:行者123 更新时间:2023-12-02 05:20:35 24 4
gpt4 key购买 nike

我有一个 PHP 文档,比如说 jsonarray.php。

当给定一些参数时,该文件返回关联数组的 json_encode。我需要禁止不需要的用户出于他自己的目的访问和使用此文件。

这可能吗?

此外,我想指定这是一个客户端请求,我在 JavaScript 代码中进行。

最佳答案

如果您正在从另一个 PHP 文件查看此文件,您可以在那里设置 BASEPATH 常量并在您需要保护的所有文件顶部添加以下行:

defined('BASEPATH') OR exit('No direct script access allowed');

因此,如果从该特定文件访问该文件,则设置 BASEPATH 并且一切正常。但是如果某些 url 直接尝试访问,脚本将终止。

如果您从 Javascript 中调用它——其他选项是将 nonce token 添加到每个 javascript 请求,这基本上是一个随机生成的唯一 token ,对单个请求有效。见Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet了解更多详情。

这是取自 here 的示例:

    function create_api_key(){
return base64_encode(base64_encode($this->encrypt(time().'X'.$_SERVER['REMOTE_ADDR'])));
}

function check_api_key($key,$timeout=5){
if(empty($key)){ exit('Invalid Key'); }

$keys=explode('X',$this->decrypt(base64_decode(base64_decode($key))));

if (isset($key) && isset($keys[0]) && $keys[0] >= (time()-$timeout) &&
isset($keys[1]) && $keys[1] == $_SERVER['REMOTE_ADDR']){
return true;
}else{
return false;
}
}

function encrypt($value){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'SECURE_KEY', $value, MCRYPT_MODE_ECB, $iv);
}

function decrypt($value){
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'SECURE_KEY', $value, MCRYPT_MODE_ECB, $iv));
}
}

$csrf = new csrf_check();

if(!empty($_GET['do'])){

$do = $_GET['do'];
switch($do){
//example.com?do=get - a key for the request
case "get":
echo $csrf->create_api_key();
break;

case "check":
//key only lasts 30 secs & validate key passed
//example.com?do=get&key=MEV6NXk4UjVRQXV5Qm1CMjBYa3RZZUhGd2M0YnFBUVF0ZkE5TFpNaElUTT0=
if(!empty($_GET['key']) && $csrf->check_api_key($_GET['key'],30)){
exit('Key valid');
}else{exit('Key invalid');}
break;

default:
exit('Request invalid');
break;
}
}

关于php - 禁止不需要的客户端请求使用 PHP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com