如果我正在创建一个只有一个登录名(管理员)的网站,将用户名和密码作为变量存储在文档中,而不是将其存储在 mysql 表中会更安全(我觉得更容易)吗?
如果我只是将它存储为变量,我就不必加盐或加密它会吗?
无论如何,我都会进行一次会议。
不要在 PHP 代码中按字面意思存储密码。原因如下:
想象一下,您正在服务器上安装 APAche+PHP - 它可能看起来像这样:
在第 2 步之后,使用 Apache 的每个人都可以读取您的 php源代码,因为它还不能传递给 php 进行解析。
如果您的 PHP/apache 安装出现故障,同样的情况也可能发生——您向所有人展示您的代码(带有密码)。
更有趣的是,对您网站的请求可能会缓存在某些代理中,即使您后来使 apache+php 正常工作,您的带有密码的源代码仍然存在。
如果您不想使用数据库 - 将密码存储在文件中(但使用数据库),该文件将位于 htdocs 目录(或 /var/html/www)之外,因此 apache 无法直接访问它。
至于存储密码本身 - 存储它的哈希值,并在验证比较哈希值的人提供的哈希值时 - 无需按字面意思存储密码。
更新: : 至于在您的 PHP 代码中存储用户名+密码以进行数据库访问 - 没关系。只需在数据库站点上为此用户分配适当的权限,以便此特定用户可以仅从您的站点访问适当的资源(并且最好是只读的)。这样,无论谁得到这些,对他来说都是无用的。这一切都取决于具体情况......所以把它当作粗略的提示或你应该注意的事情清单。
更新 #2 - 更好地阅读这个:
我不会删除我上面写的东西——但我承认它很笨拙——写得很快,而且我没有把我的意图表达得太清楚。她是你可能真正做的事情,对你来说会很好。假设您有 index.php 文件,您可以在其中正常执行所有操作 - 验证用户密码,访问数据库。所以你有点想把所有这些信息都保存在这个文件中。由于上述问题,有时未经授权的人可能会看到它。
这样做(快速且有效):
索引.php
<?php
require_once('./private/secret.php'); // defines ADMIN_HASH, DB_USER, DB_PASS
// here you can use ADMIN_HASH, DB_USER, DB_PASS and
// even if someone gains access to the source code from
// this file (via HTTP) no one will see your priv data
?>
/private/.htaccess
deny from all
私人/secret.php
<?php
// define here any private data that you wish
// file will be included from others but never allowed to be seen due to rewrite rule from .htaccess
define('ADMIN_HASH', 'your admin password\'s hash - for example md5');
define('DB_USER', 'user used to access db');
define('DB_PASS', 'password for above user');
?>
当然 mod_rewrite 必须在你的 Apache 上工作。上面的内容可以防止您将私有数据直接保存在您的代码中,如果 PHP 不工作,这些数据可能是可见的。同时,即使 PHP 不工作(并且代码清晰),仍然没有人可以使用 http 访问您的 'private/secret.php' 文件。
源代码中硬编码的密码仅供有权访问源代码的人员使用。所以是的,它更容易受到攻击。
此外,由于只有一个管理员密码,因此将其存储在其他地方本身就是一种过度杀伤力。
但是,加盐/加密是另一回事。如果担心其他不那么受信任的人可以访问源代码(或者由于系统的其他安全漏洞而导致源代码受到损害),您可以将其加密存储在变量中。