管理层又罢工了。
我应该如何满足将要读取我的php源代码并标记我的MySQL连接字符串的代码扫描器呢?
我必须在连接字符串中加密我的MySQL密码,除了它将被自动代码测试解决方案标记为红色之外。管理人员被钢笔测试的概念迷住了,而没有理解它。
我非常清楚,与所有其他措施一起加密文件中的密码是不安全的,但是如果我不遵守,我的网站就会被删除。我知道这会损害性能,但这个网站并不那么受欢迎,也不是一个庞大的数据库驱动应用程序。
我的尝试:
//encrypt and decrypt are functions I stole wholesale off of the php.net manual
...
$SuperSecure[0] = array(encrypt("test"), encrypt("test")); //dev
...
$dbcnx = mysql_connect('localhost', decrypt($SuperSecure[0][0]), decrypt($SuperSecure[0][1]));有更好的办法吗?更重要的是,我是不是错过了什么,而这真的是必要的?
编辑:我不能再和全国人民战斗了。如果我无视这个指令,我的网站就会因为这件事而丢掉我的工作。我只是想尽可能轻松地做到这一点(并且对性能的影响最小)。
发布于 2009-12-29 22:59:08
如果不想将密码直接写入mysql_connect,为什么不编写以下内容:
$username = 'test';
$password = 'test';
mysql_connect('localhost', $username, $password);在不知道扫描仪有多聪明的情况下,你将无法真正分辨出什么东西是模糊的,足以不升起任何标志。
发布于 2009-12-29 22:28:37
您可以使用rot13混淆(而不是加密)密码。
发布于 2009-12-29 23:05:58
您不能在php.ini文件中定义默认的mysql主机、用户名和密码吗?然后,mysql_connect函数看起来如下:
`mysql_connect();`除非黑客拥有您的php.ini文件,否则他们将无法访问用户名或密码。即使他们将函数更改为echo。当然,它们可以响应指令,但我认为这已经足够模糊了,因为除了php.ini (服务器文件)之外,在任何源文件中都找不到密码。
如果有人做了phpinfo();,它也会显示在普通的站点中,但是它仍然可以工作。
这个解决方案非常类似于另一个答案提供的ODBC解决方案。它还存在一个缺陷,即如果扫描器检查您的php.ini文件,它将以红色标记代替。
如果您想同时取笑它,我建议在需要连接之前将mysql代码的片段随机放入所有包含的随机文件中。又名
Index.php
Global $password;
$password = "S";RandomFile.php
Global $password;
$password .= "T";RandomFile2.php
Global $password;
$password .= "A";RandomFile3.php
Global $password;
$password .= "CK";RandomFile4.php
Global $password;
mysql_connect($host, $username, $password."Overflow");https://stackoverflow.com/questions/1977237
复制相似问题