如果我创建一个只有一个登录名(管理员)的网站,将用户名和密码作为变量存储在文档中会比将其存储在 mysql 中更安全(我觉得更容易)表?
如果我只是将其存储为变量,我就不必对其进行加盐或加密?
无论如何我都会参加一次 session 。
最佳答案
不要将密码按字面意思存储在 PHP 代码中。原因如下:
假设您正在服务器上安装 APAche+PHP - 它可能看起来像这样:
- 安装 Apache
- 哦...已经完成了 - 所以我将把我的 php 代码放入 htdocs
- 安装 PHP
在第 2 步之后,每个使用 Apache 的人都可以读取您的 php 源代码,因为它还无法传递给 php 进行解析。
如果您的 PHP/apache 安装出现故障,可能会发生同样的情况 - 您向所有人展示您的代码(带有密码)。
更有趣的是,对您网站的请求可能会缓存在某些代理中,即使您稍后使 apache+php 正常工作,您的源代码和密码仍然存在。
如果您不想使用数据库 - 将密码存储在文件中(但使用数据库),该文件将位于 htdocs 目录(或/var/html/www)之外,这样 apache 就无法直接访问它。
至于存储密码本身 - 存储它的哈希值,并在验证时将任何人提供的哈希值与您拥有的哈希值进行比较 - 无需存储密码文字。
更新:: 至于在 PHP 代码中存储用于数据库访问的用户名+密码 - 没问题。只需在数据库站点上为该用户分配适当的权限,以便该特定用户只能从您的站点访问适当的资源(最好是只读)。这样一来,无论谁得到了这些,它们对他来说都是毫无用处的。这一切都取决于具体情况...因此请将其视为粗略提示或您应该注意的事项列表。
更新 #2 - 最好阅读以下内容:
我不会删除我上面写的内容 - 但我承认它很笨拙 - 写得很快,而且我还没有太清楚地表达我的意图。 她是你真正可以做的事情,而且对你来说会很好。假设您有 index.php 文件,您通常会在其中执行所有操作 - 验证用户密码、访问数据库。所以你想将所有这些信息保存在这个文件中。由于上述问题,有时未经授权的人可能会看到它。
这样做(快速且有效):
- 在“index.php”所在的同一目录中创建“私有(private)”子目录
- 在“private”中放置 2 个文件“.htaccess”和“secret.php”:
index.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
private/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 上运行。上述内容可以防止您将私有(private)数据直接保存在代码中,如果 PHP 不工作,这些数据可能是可见的。同时,即使 PHP 不工作(并且代码合理),仍然没有人可以使用 http 访问您的“private/secret.php”文件。
关于php - 网站只需一次登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19836976/