php ci rest,php – CI REST服务器API密钥

该博客探讨了在API安全方面使用RSA加密的重要性。通过在CodeIgniter中实施RSA加密,可以防止API密钥被拦截和滥用。文章建议对敏感数据进行加密,使用非对称加密来保护对称密钥,从而确保即使API密钥被查看,也无法解密传输的内容。作者提供了CodeIgniter中实现RSA加密的示例代码,以帮助开发者提高其API的安全性。
摘要由CSDN通过智能技术生成

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

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

解决方法:

为了确保最大的安全性,你应该加密所有发送的数据,然后如果API可以正确解密你应该没问题,你可以使用RSA加密,所以如果任何人拦截请求他不能解密或克隆它,但RSA不是旨在用于长文本块,因此您可以使用混合加密.即,这涉及使用RSA对对称密钥进行非对称加密.

随机生成对称加密(例如AES)密钥并使用它加密纯文本消息.然后,用RSA加密对称密钥.传输对称加密的文本以及非对称加密的对称密钥.

然后,API可以解密RSA块,这将产生对称密钥,允许对称加密的文本被解密.

要在CodeIgniter上实现RSA,可以使用this类,在控制器上调用文件require_once(“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');

}

标签:php,rest,codeigniter,api

来源: https://codeday.me/bug/20190703/1363845.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值