0

如果我正在创建一个只有一个登录名(管理员)的网站,将用户名和密码作为变量存储在文档中,而不是将其存储在 mysql 表中会更安全(我觉得更容易)吗?

如果我只是将它存储为变量,我就不必加盐或加密它会吗?

无论如何,我都会进行一次会议。

4

2 回答 2

2

不要在 PHP 代码中按字面意思存储密码。原因如下:

想象一下,您正在服务器上安装 APAche+PHP - 它可能看起来像这样:

  • 安装阿帕奇
  • 哦...它完成了 - 所以我将把我的 php 代码放入 htdocs
  • 安装 PHP

在第 2 步之后,使用 Apache 的每个人都可以读取您的 php源代码,因为它还不能传递给 php 进行解析。

如果您的 PHP/apache 安装出现故障,同样的情况也可能发生——您向所有人展示您的代码(带有密码)。

更有趣的是,对您网站的请求可能会缓存在某些代理中,即使您后来使 apache+php 正常工作,您的带有密码的源代码仍然存在。

如果您不想使用数据库 - 将密码存储在文件中(但使用数据库),该文件将位于 htdocs 目录(或 /var/html/www)之外,因此 apache 无法直接访问它。

至于存储密码本身 - 存储它的哈希值,并在验证比较哈希值的人提供的哈希值时 - 无需按字面意思存储密码。

更新: : 至于在您的 PHP 代码中存储用户名+密码以进行数据库访问 - 没关系。只需在数据库站点上为此用户分配适当的权限,以便此特定用户可以仅从您的站点访问适当的资源(并且最好是只读的)。这样,无论谁得到这些,对他来说都是无用的。这一切都取决于具体情况......所以把它当作粗略的提示或你应该注意的事情清单。

更新 #2 - 更好地阅读这个:

我不会删除我上面写的东西——但我承认它很笨拙——写得很快,而且我没有把我的意图表达得太清楚。她是你可能真正做的事情,对你来说会很好。假设您有 index.php 文件,您可以在其中正常执行所有操作 - 验证用户密码,访问数据库。所以你有点想把所有这些信息都保存在这个文件中。由于上述问题,有时未经授权的人可能会看到它。

这样做(快速且有效):

  • 在您的“index.php”所在的同一目录中创建“私人”子目录
  • 在“私人”中放置 2 个文件“.htaccess”和“secret.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' 文件。

于 2013-11-07T13:31:23.943 回答
0

源代码中硬编码的密码仅供有权访问源代码的人员使用。所以是的,它更容易受到攻击。

此外,由于只有一个管理员密码,因此将其存储在其他地方本身就是一种过度杀伤力。

但是,加盐/加密是另一回事。如果担心其他不那么受信任的人可以访问源代码(或者由于系统的其他安全漏洞而导致源代码受到损害),您可以将其加密存储在变量中。

于 2013-11-07T13:25:48.000 回答