【发布时间】:2012-09-21 15:10:15
【问题描述】:
使用时:
$con = mysql_connect('localhost','user','password')
我已了解将密码部分存储在其他地方的好处 (https://stackoverflow.com/a/3354457/1704651)。
我是 PHP 新手,想知道我存储 MySQL 密码的方法是否安全:
- 第一步,选择一个冗长的 MySQL 数据库密码 (https://www.random.org/passwords/?num=1&len=24&format=html&rnd=new)
-
第二步,把这个放到/outsidewebroot/salt.php(我的实际salt更长)
<?php $salt = sdcjbdt8veADJbyuQxsfJtYeW7tC5; ?> -
第三步,使用临时PHP文件对密码进行编码(使用后删除):
$decrypted = "my decrypted MySQL password" $key = $salt; $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $decrypted, MCRYPT_MODE_CBC, md5(md5($key)))); var_dump($encrypted); -
第四步,把这段代码放到.htaccess中
SetEnv encrypted-password i3NOByNkztBtEbJ8LJMt2GbX9VjMzO2MTYtBXsxyYVI= -
第五步,把这段代码放在你需要连接数据库的地方:
require_once("../../outside-webroot/salt.php") $key = $salt $decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($encrypted-password), MCRYPT_MODE_CBC, md5(md5($key))), "\0"); $con = mysql_connect('localhost','user',$decrypted)
/outsidewebroot/salt.php 中的盐与我在数据库中用于散列密码的盐相同,因此我只需将其包含一次以供两次使用。
我在这里看到的加密/解密方法:http://ideone.com/yQIAX
我也见过这种方法:https://stackoverflow.com/a/3354457/1704651 使用哈希而不是加密/解密方法。
感谢您对我的方法的反馈。
【问题讨论】:
-
保护它的第一种方法是使用 mysqli 或 POD 与准备好的语句连接到 mysql db。您想阻止注射发生。
-
不要在 mysql 密码的加密上投入大量精力,而应该把精力放在使您的网站安全上。给你我网站的IP和mysql密码没问题!
-
JvdBerg,我对此很陌生!您如何保护您的数据库?你有链接吗?亲切的问候,
-
(另外,我不知道 mysqli 或 POD,因为 mysql_connect() 命令是我读到的第一个命令。感谢 Moe Tsao)
标签: php mysql database-connection password-encryption