Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CI REST服务器API密钥_Php_Api_Codeigniter_Rest - Fatal编程技术网

Php CI REST服务器API密钥

Php CI REST服务器API密钥,php,api,codeigniter,rest,Php,Api,Codeigniter,Rest,我是API开发的新手,但通过阅读我能找到的所有文章,我成功地实现了Phil Sturgeon和Chris Kacerguis的CI REST Server,但有一个问题我没有回答:和 我已经按照第一个问题的公认答案向数据库中添加了“boguskey”,但我对这里的安全性感到困惑。如果我需要一个硬编码的API密钥来生成新的密钥,并且有人可以查看标题来查看这个伪造的API密钥,那么我如何从使用此API密钥在我的API中为我们生成大量API密钥的人那里保护我的API呢?如果我不添加boguskey,那

我是API开发的新手,但通过阅读我能找到的所有文章,我成功地实现了Phil Sturgeon和Chris Kacerguis的CI REST Server,但有一个问题我没有回答:和

我已经按照第一个问题的公认答案向数据库中添加了“boguskey”,但我对这里的安全性感到困惑。如果我需要一个硬编码的API密钥来生成新的密钥,并且有人可以查看标题来查看这个伪造的API密钥,那么我如何从使用此API密钥在我的API中为我们生成大量API密钥的人那里保护我的API呢?如果我不添加boguskey,那么无论调用哪个函数,我都会得到“无效API密钥”


如果这是一个愚蠢的问题,我深表歉意,但是如果有人举了一个我如何安全地生成密钥的例子(或者如果我误解了情况,至少告诉我),我将非常感激。

为了确保最大安全性,您应该加密所有发送的数据,如果API能够正确解密,您应该会很好,您可以使用RSA加密,因此,如果任何人截获请求,他都无法解密或克隆请求,但RSA不是为长的纯文本块设计的,因此您可以使用混合加密。也就是说,这涉及到使用RSA对对称密钥进行非对称加密

随机生成一个对称加密(比如AES)密钥并用它加密纯文本消息。然后,使用RSA加密对称密钥。传输对称加密的文本以及不对称加密的对称密钥

然后,API可以对RSA块进行解密,从而生成对称密钥,从而允许对对称加密的文本进行解密

要在CodeIgniter上实现RSA,可以使用类调用控制器上的文件
require_一次(“RSA.php”)

在API使用者控制器上创建一个数组,其中包含数据和不对称加密的对称密钥

$request_data = array();
$request_data["username"] = "taghouti";
$request_data["project"] = "Secured_API";
$serialized_request_data = serialize($request_data);
$enc = new RSAEnc($serialized_request_data,'public_key');
$encrypted = $enc->result();
$request_data = array(
    "data" => base64_encode($encrypted->result), 
    "key" => base64_encode($encrypted->key)
);
在API控制器上,您应该尝试使用私钥对对称密钥进行解密,如果解密成功,您就可以了

if ($_POST["key"]) {
  $key = base64_decode($_POST["key"]);
  $_POST["key"] = null;
  if (isset($_POST["data"])) {
    $data = base64_decode($_POST["data"]);
    $dec = new RSADec($data, 'private_key', $key);
    $decrypted = $dec->result();
    if($decrypted->success !== true) die("Decryption failed");
    $decrypted = @unserialize($decrypted->result);
    $_POST = is_array($decrypted) ? $decrypted : array();
    $this->_post_args = $_POST;
  }
} 

if($this->input->post('project') && $this->input->post('username')) {
  //Enjoy
} else {
  die('data parsing error');
}

有人知道吗?我所做的任何研究都没有向我展示我可以使用的东西。我真的希望在这里得到一些反馈。提前谢谢!您的伪密钥是否有足够的权限使用api的http路径?密钥的“级别”需要具有至少或更大的权限才能使用结束路径。GETS可能有一个低级别1,其中PUTS、Post和DELETES将有一个具有较高访问权限级别的不同密钥,可能是10.Hi@Withremote。权限不是这里的问题。问题是伪密钥在标题中清晰可见,因此我担心人们会滥用我的API来创建新帐户。尽管如此,我仍然没有答案——除了可能使用非常低的限制。@KobusMyburgh你们解决了这个问题吗?如果是,如何进行?我也面临同样的问题。我正在进行ajax调用以生成密钥,但要执行该操作,我需要传递管理员密钥,然后所有人都可以看到该密钥。我如何安全地创建或挂起密钥?@HardiksinhGohil很遗憾没有,抱歉。我不得不制定另一个计划。