启动时将DB密码和密钥加载到PHPs内存中
我有点急于将我的数据库用户名、密码和加密密钥放入一个PHP文件中,让所有侵入服务器的人都能轻松读取。是否可以加载PHP并告诉它可能需要的密码 我的问题很简单:除了将所有内容放在一个文件中之外,还有其他方法让PHP知道DB密码和密钥吗 欢迎提出任何意见。启动时将DB密码和密钥加载到PHPs内存中,php,password-protection,Php,Password Protection,我有点急于将我的数据库用户名、密码和加密密钥放入一个PHP文件中,让所有侵入服务器的人都能轻松读取。是否可以加载PHP并告诉它可能需要的密码 我的问题很简单:除了将所有内容放在一个文件中之外,还有其他方法让PHP知道DB密码和密钥吗 欢迎提出任何意见。 制作安全的脚本。如果你的脚本是安全的,就没有办法被黑客攻击 使仅包含密码的脚本可读 确保对密码文件的访问超出web范围 据我所知,为了启动数据库连接,您必须在某个时候声明变量。然而,你可以做一些事情,让别人更难阅读 除了在另一个答案中提到的安全
- 制作安全的脚本。如果你的脚本是安全的,就没有办法被黑客攻击
- 使仅包含密码的脚本可读
- 确保对密码文件的访问超出web范围
据我所知,为了启动数据库连接,您必须在某个时候声明变量。然而,你可以做一些事情,让别人更难阅读 除了在另一个答案中提到的安全编程实践之外,您可以确保只将密码存储在一个文件(例如Config.php)中,并将其包含在数据库连接函数中。此外,您可以将此变量存储在web根目录之外,这意味着除非有服务器访问权限,否则用户将无法访问它 您还可以使获得访问权限的人更难阅读。这包括使用密码对其进行加密,然后在使用时对其进行解密。请注意,加密/解密密钥也必须存储在服务器上,这同样会给您带来不便
在保护代码时采取适当的安全措施,并限制数据库,使其只能在本地访问。这应该提供足够的安全性。从技术上讲,没有人看不到您的php脚本。无论如何,我只是更新了我的数据库宏到最新的标准。以下是我在CMS中的工作方式: config.php文件:
<?
if (!defined('A52CMS')) {die('What are you looking for? 0.o');}
$config_mysql = array(
'database' => 'databasename1',
'user' => 'username1',
'password' => 'password1',
'table_prefix' => 'a52_'
);
<?
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!');
}
}
}
<?
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
<?
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..
难道“apache可读”和“apache范围”不是对立的字典吗?应该是“apache可读”和(不在)web范围内的“拒绝所有人”,这样就可以了