php - 网站只需一次登录

标签 php mysql security authentication

如果我创建一个只有一个登录名(管理员)的网站,将用户名和密码作为变量存储在文档中会比将其存储在 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/

相关文章:

PhpStorm 未检测到 php 库命名空间

php - 无法在 OS X Mavericks 上加载 PHP 扩展

php - 论坛上下文中的 mysqli_real_escape_string() 或addslashes()

php - 查询列中的多个值

c# - 在 session 中存储登录名和密码哈希是否安全?

php - 在 Apache 2.2 上使用 FatFree 和 PHP5.3 时无法呈现简单页面

将数据插入数据库的 PHP 脚本在执行时返回成功,但记录未插入数据库?

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

javascript - 如果所有浏览器都使用同源策略,CSRF 攻击如何发挥作用?

Java System.setSecurityManager() 不能很好地处理策略文件