php代码敏感数据,请注意PHP程序里的敏感信息

何为敏感信息?简单点来说就是你不想让别人知道的信息,比如说数据库的地址,用户名,密码等等,此类信息往往知道的人越少越好。

通常,PHP程序里的配置文件大致如下所示:

return array(

'database' => array(

'host' => '192.168.0.1',

'username' => 'administrator',

'password' => 'e1bfd762321e409cee4ac0b6e841963c',

),

);

?>

有时候出于某些原因,比如说代码审查,亦或者合作开发等等,第三方需要获取代码版本仓库的读权限,一旦授权,数据库的地址,用户名,密码等敏感信息就暴露了。当然也可以不在代码版本仓库里保存配置文件,取而代之是撰写文档进行说明,但我不喜欢这样的方法,因为如此一来,代码本身是不完整的。

如何解决此类问题呢?最直接的方法是把敏感信息从代码中拿掉,换个地方保存。具体保存到哪里呢?有很多选择,比如说通过nginx的fastcgi_param来设置:

fastcgi_param DATABASE_HOST 192.168.0.1;

fastcgi_param DATABASE_USERNAME administrator;

fastcgi_param DATABASE_PASSWORD e1bfd762321e409cee4ac0b6e841963c;

经过这样的映射后,我们的代码就不会直接包含敏感信息了:

return array(

'database' => array(

'host' => $_SERVER['DATABASE_HOST'],

'user' => $_SERVER['DATABASE_USERNAME'],

'password' => $_SERVER['DATABASE_PASSWORD'],

),

);

?>

此外,还可以通过php-fpm的env指令来设置:

env[DATABASE_HOST] = 192.168.0.1

env[DATABASE_USERNAME] = administrator

env[DATABASE_PASSWORD] = e1bfd762321e409cee4ac0b6e841963c

需要说明的一点是,这个设置必须放在主配置文件php-fpm.conf里,不能放到include指令设置的子配置文件里,否则会报错:「Array are not allowed in the global section」;另外一点,虽然是通过env设置的,但结果还是在$_SERVER里,而不是$_ENV。

通过nginx和php-fpm配置文件来解决问题的话,有一个缺点,仅对Web有效,如果通过命令行来运行,那么无法在$_SERVER里获取相关信息,不过这不算什么难事儿,只要写个公共的脚本正则匹配一下nginx或者php-fpm的配置文件,就可以动态的把这些信息映射到命令行环境,具体怎么搞就留给大家自己操作吧。

说明: @Laruence 提醒了我,如果配置信息通过nginx的fastcgi_param来设置的话,当nginx和php交互时,会带来大量的数据传输(如此看来通过php-fpm的env来设置相对更有优势),鸟哥建议使用独立的扩展来搞定,比如「hidef」。如果你使用hidef的话,需要注意一点,hidef定义的常量通过phpinfo函数可以一览无遗,为了安全性,你应该在配置文件php.ini里禁用相关函数:「disable_functions = phpinfo」。

看起来还是hidef可用性更好些,具体选择就看客观情况而定吧,如果能够安装扩展,那么就推荐使用hidef,否则就推荐使用env的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于您没有提供更具体的信息,我无法提供完整的解密代码。但是,以下是一个基本的字节跳动小程序接入示例代码: ```php <?php // 小程序 appid 和 secret $appid = 'your_appid'; $secret = 'your_secret'; // 从前端获取的加密数据和加密向量 $encryptedData = $_POST['encryptedData']; $iv = $_POST['iv']; // 获取 access_token $url = 'https://developer.toutiao.com/api/apps/token'; $params = [ 'appid' => $appid, 'secret' => $secret, 'grant_type' => 'client_credential', ]; $response = json_decode(httpGet($url, $params)); $accessToken = $response->access_token; // 解密数据 $url = 'https://developer.toutiao.com/api/apps/jscode2session'; $params = [ 'appid' => $appid, 'secret' => $secret, 'code' => $_POST['code'], ]; $response = json_decode(httpGet($url, $params)); $sessionKey = $response->session_key; $pc = new Prpcrypt($sessionKey); $result = $pc->decryptData($encryptedData, $iv); $data = json_decode($result); // 处理解密后的数据 // ... // httpGet 函数用于发送 GET 求 function httpGet($url, $params) { $url .= '?' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return $response; } // Prpcrypt 类用于解密数据 class Prpcrypt { private $key; public function __construct($key) { $this->key = base64_decode($key . '='); } public function decryptData($encryptedData, $iv) { $decrypted = openssl_decrypt( base64_decode($encryptedData), 'AES-128-CBC', $this->key, OPENSSL_RAW_DATA, base64_decode($iv) ); return $decrypted; } } ``` 注意,上述代码仅用于演示目的,您需要根据自己的实际情况进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值