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

时间:2017-11-20 15:15:22

标签: php mysql database

我正在创建一个登录网站,用户可以使用usernamepassword登录并编写他们的产品。我创建了一个名为'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万用户,哪种方法是实现此示例的更好方法?

3 个答案:

答案 0 :(得分:0)

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

  1. 如何在数据库中存储密码
  2. 是否可以拥有不同的数据库
  3. 如何隐藏文件中的数据库密码

    1. 对于第一个问题,您应该使用散列函数(它们无法以编程方式恢复)。对于php,最好使用password_hash()password_verify(),这非常容易上班。

    2. 你不能这样做,这不是财产方式。当您拥有超过1M的用户时会发生什么? :)

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

答案 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}}文件。

如果您的问题是关于用户/其他密码或数据库中存储的某些数据,是的,您应加密它。