PHP登录表单:SQL数据库密码

PHP登录表单:SQL数据库密码,php,mysql,database,Php,Mysql,Database,我正在创建一个登录网站,用户使用用户名和密码登录并编写日记。我已经创建了一个名为'diary'的SQL数据库,可以在本地主机上使用以下命令访问该数据库 $dbhost = 'localhost:3306'; $dbuname = 'diary'; $dbpass = 'guest123'; 在数据库diary中,我创建了一个表,其中存储了VARCHAR类型的3个信息,即 user\u id 密码(我只是出于教程目的使用纯文本) name 在上面的示例中,我在下面的代码中提供了数据库的密码和

我正在创建一个登录网站,用户使用
用户名
密码
登录并编写日记。我已经创建了一个名为
'diary'
的SQL数据库,可以在本地主机上使用以下命令访问该数据库

$dbhost = 'localhost:3306';
$dbuname = 'diary';
$dbpass = 'guest123';
在数据库
diary
中,我创建了一个表,其中存储了
VARCHAR
类型的3个信息,即

  • user\u id
  • 密码
    (我只是出于教程目的使用纯文本)
  • name
在上面的示例中,我在下面的代码中提供了数据库的密码和名称,以便访问数据库

$conn = mysqli_connect($dbhost, $dbuname, $dbpass);
我的问题是,硬编码数据库的密码是安全的(例如数据库的密码
日记
)?考虑到一个在线应用程序,如果黑客可以侵入服务器,那么他将拥有对数据库的完全访问权限,因为我已经在程序中硬编码了密码

在上面的示例中,我假设我有一个数据库
diary
,它存储所有用户登录信息


另一种选择是,每个用户都有自己的数据库,该数据库是在他们注册时创建的。但是,我认为这个选项并不理想,因为每个用户的所有数据库都是不相关的,可能很难管理


我只是需要一些关于这个问题的解释,因为我对这部分还不熟悉,尤其是SQL。假设我有100万用户,哪种方法更适合实现此示例?

不要以纯文本形式存储密码,您应该使用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
}

您的问题非常有趣,我可以将其分为三个部分:

  • 如何在数据库中存储密码
  • 有不同的数据库可以吗
  • 如何在文件中隐藏数据库密码

  • 对于第一个问题,您应该对函数进行散列(它们不能通过编程方式恢复)。对于php,最好使用
    password\u hash()
    password\u verify()

  • 你不能这样做,这不是一个财产的方式。当用户超过100万时会发生什么情况?:)

  • 如果他们有权访问服务器,他们可以使用数据库,因此您无法阻止他们,但如果您想隐藏他们,请阅读有关RSA和AES文件加密的更多信息。您还可以使用一些函数,如
    hex2bin
    bin2hex
    ,但这并不是真正隐藏的。另一种方法是将这些文件移动到某种权限保护的目录中,但实际上要做到这一点要困难得多


  • 密码(纯文本)
    我现在可以告诉你,这是个坏主意。这只是我自己学习的一个例子,当然我可以使用MD5或RSA加密。MD5???你也可以坚持纯文本lol!!不您应该使用php的password_hash函数。回到您的问题:由于要从php连接到数据库,您必须提供一个密码作为普通参数-如果您的db用户有密码。(如果我用密码连接到数据库时出错,请纠正我!!)这是一条评论,不是对原始SO的回答!这并不能回答这个问题。一旦你有足够的钱,你将能够;相反,提供答案。另外,是一个非常有用的资源!对不起,不确定什么是评论或回答。那么,我应该删除这个答案吗?我现在非常清楚地看到,充实这个问题的答案,或者删除这个答案并发表评论。(1)和(2)。对于(3),您提到了RSA加密,如果我没有错,那么如果我加密密码,那么在连接SQL之前,我必须对其进行解密?是这样吗?@kcc_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?不应该有任何理由解密。@GrumpyCrouton,我指的是用于打开数据库连接的
    $dbpass
    。不要加密密码,当攻击者获得数据库时,他也会获得加密密钥。@kcc_uuu如果他们有权访问php文件,他们肯定不需要你的明文密码。他们可以使用现有的连接。