当前位置:Gxlcms > PHP教程 > PHP程序中敏感信息要关注哪些

PHP程序中敏感信息要关注哪些

时间:2021-07-01 10:21:17 帮助过:19人阅读

  1. return array(
  2. 'database' => array(
  3. 'host' => '192.168.0.1',
  4. 'user' => 'administrator',
  5. 'password' => 'e1bfd762321e409cee4ac0b6e841963c',
  6. ),
  7. );
  8. ?>

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

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

  1. return array(
  2. 'database' => array(
  3. 'host' => $_SERVER['DATABASE_HOST'],
  4. 'user' => $_SERVER['DATABASE_USERNAME'],
  5. 'password' => $_SERVER['DATABASE_PASSWORD'],
  6. ),
  7. );
  8. ?>

此外,还可以通过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。

说明: @Laruence 提醒了我,如果配置信息通过nginx的fastcgi_param来设置的话,当nginx和php交互时,会带来大量的数据传输(如此看来通过php-fpm的env来设置相对更有优势),鸟哥建议使用独立的扩展来搞定,比如「hidef」。

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

剩下的工作就是如何确保nginx或php-fpm配置文件的安全了,不过和代码比起来,nginx或php-fpm配置文件并不需要很多人有权限,所以相对更容易管理。

人气教程排行