我正在创建一个登录网站,用户可以使用username
和password
登录并编写他们的产品。我创建了一个名为'diary'
的SQL数据库,可以使用我的localhost上的以下内容访问它。
$dbhost = 'localhost:3306';
$dbuname = 'diary';
$dbpass = 'guest123';
在数据库diary
内部,我创建了一个表,存储了3个VARCHAR
类型的信息,即
user_id
password
(我只是用纯文本作教程)name
在上面的示例中,我在以下代码中提供了密码和数据库名称,以便访问数据库。
$conn = mysqli_connect($dbhost, $dbuname, $dbpass);
我的问题是,对数据库密码进行硬编码是安全的(例如数据库diary
的密码)?考虑到在线应用程序,如果黑客可以入侵服务器,那么他将拥有对数据库的完全访问权限,因为我在程序中对密码进行了硬编码。
我在上面的例子中假设我有一个数据库diary
,它存储所有用户的登录信息。
另一种选择是每个用户都有自己的数据库,这些数据库在注册时创建。但是,我认为这个选项并不理想,因为个别用户的所有数据库都是分离的,可能很难管理。
我只需要对这个问题进行一些解释,因为我是这部分的新手,尤其是SQL。假设我有100万用户,哪种方法是实现此示例的更好方法?
答案 0 :(得分:0)
您的问题非常有趣,我可以将其分为三个部分:
如何隐藏文件中的数据库密码
对于第一个问题,您应该使用散列函数(它们无法以编程方式恢复)。对于php,最好使用password_hash()
和password_verify()
,这非常容易上班。
你不能这样做,这不是财产方式。当您拥有超过1M的用户时会发生什么? :)
如果他们可以访问服务器,他们可以使用数据库,因此您无法阻止它们,但如果您想隐藏它们,请阅读有关RSA和AES文件加密的更多信息。您也可以将某些功能用作hex2bin
和bin2hex
,但这并非真正隐藏。另一种方法是将这些文件移动到某种受权限保护的目录中,但实际上要做得更困难。
答案 1 :(得分:-3)
不要以明文形式存储密码,您应该使用PHP的内置函数来散列密码:
// persist this hash in the db
var $hash = password_hash($plainPassword)
// verify later
if (!password_verify($givenPass, $hash)) {
// provided password is incorrect, handle here
}
https://php.net/manual/en/function.password-hash.php https://php.net/manual/en/function.password-verify.php
答案 2 :(得分:-4)
如果您正在谈论访问数据库的密码,是的。你可以把它保存在文件上。只要此文件没有直接访问权限(您可以在此处查看如何#409496)并且不打印数据。您基本上应该相信您的服务器以保证文件安全。甚至像WordPress这样的平台也会使用{{1}}文件。
如果您的问题是关于用户/其他密码或数据库中存储的某些数据,是的,您应加密它。