Load DB password and keys into PHPs memory on startup
我有点着急要把我的数据库用户名、密码和加密密钥放到一个PHP文件中,每个黑客侵入服务器的人都可以很容易地读取这个文件。是否可以加载PHP并告诉它可能需要的密码?
我的问题很简单:除了将所有内容放在一个文件中,还有其他方法可以让PHP知道DB密码和密钥吗?
欢迎有任何想法。
据我所知,为了启动数据库连接,您必须在某个时刻声明变量。但是,你可以做一些事情,让别人读起来更困难。
除了在另一个答案中提到的安全编程实践之外,您可以确保只将密码存储在一个文件(如config.php)中,并将其包含在数据库连接函数中。此外,您可以将此变量存储在Web根目录之外,这意味着除非有服务器访问权,否则人们将无法访问它。
您还可以使获得访问权限的人更难阅读。这包括用对称密钥算法对其进行加密,然后在使用时对其进行解密。请注意,加密/解密密钥也必须存储在服务器上,这会给您带来不便。
采取适当的安全措施保护代码,并限制数据库,使其只能在本地访问。这应该提供足够的安全性。
从技术上讲,没有人看不到您的PHP脚本。无论如何,我只是更新了我的数据库宏到最新的标准。这就是我在CMS中的工作方式:
config.php文件:
1 2 3 4 5 6 7 8 9 10 |
db_macros.php文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? if (!defined('A52CMS')) {die('What are you looking for? 0.o');} class DB { protected $default_config = array( 'server' => 'localhost', 'database' => '', 'user' => 'root', 'password' => '', 'table_prefix' => 'a52_', 'mysql_config_array' => 'config_mysql' ); function __construct ($config_mysql) { $this->config = array_merge($this->default_config, $config_mysql); /* There are some secret connection related stuff here */ mysql_query("SET NAMES utf8"); unset($this->config['password']); unset($GLOBALS[$this->config['mysql_config_array']]); } /* There are alot of mysql related functions here */ function __destruct () { mysql_close($this->conn); if (@mysql_ping($this->conn)) { CriticalError('Closing mysql connection was unsuccessful!'); } } } |
号
core.php文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <? if (!defined('A52CMS')) {die('What are you looking for? 0.o');} require('config.php'); // Lets try to display the mysql raw data print_r($config_mysql); // displays something require('db_macros.php'); $DB = new DB($config_mysql); // Lets try to display the mysql raw data AGAIN print_r($config_mysql); // displays nothing |
index.php文件:
1 2 3 4 5 6 7 | <? define('A52CMS', true); require('core.php'); // This where the content starts.. if some plugin is being included, then mysql data is already unset, so basically you cannot hack them.. |
。
您可能会了解一些如何使您的应用程序更加安全的方法。另外,对于如何构造自定义的MySQL类,您可能会有一些新的想法(如果您还没有这样做的话)。
- 制作安全的脚本。如果你的脚本是安全的,就没有办法被黑客攻击
- 使您的脚本仅包含Apache可读的密码
- 确保对密码文件的访问不在Web范围内
我甚至没有看到其他方法来"保存"密码