【问题标题】:Make a secure file that PHP can read?制作一个 PHP 可以读取的安全文件?
【发布时间】:2011-09-23 21:01:17
【问题描述】:

我有一个类似这样的文件,它是一个用户数据库 (udb.htm):

user1:pwd1
user2:pwd2
user3:pwd3

类似的东西。我想保护此文件并通过file_get_contents("udb.htm"); 方法使其可用于PHP,但不是浏览器窗口。谢谢!

【问题讨论】:

  • 请告诉我您已加密密码...
  • 那么,您只是想通过 PHP 读取文件?
  • 您不应该使用 MD5 来加密密码。真的,您甚至不应该将用户名和密码存储在文本文件中。
  • 请不要这样做。如果您所说的“保护此文件”的意思是“阻止将其提供给客户”,那么您的用户就有麻烦了。
  • 您可以将用户名、密码和盐存储在一个文件中,只要它们被正确加密(这就是 *nix 所做的)。始终假设存在可以访问您所有用户数据的攻击者。诀窍在于几乎不可能破解 pw/salt 组合。

标签: php security file file-get-contents


【解决方案1】:

你可以:

  • 将文件上传到公共 html 目录之外的目录中,但该 php 有权访问
  • 使用 apache .htaccess 或类似方法阻止对文件的访问
  • 使用 HTTP 基本身份验证
  • 将数据保存在实际数据库(mysql、mssql、oracle、sqlite)中

【讨论】:

    【解决方案2】:

    将文件放在网络根目录之外。例如,在包含public_html 的目录中。 PHP 可以访问它(以及系统上的任何其他文件),但您无法从 Web 访问它。

    【讨论】:

      【解决方案3】:

      将文件移动到 PHP 仍可访问但 Web 客户端无法访问的文件夹中。

      【讨论】:

      • “将文件移入文件夹” - 从文件夹中?
      • 我认为你们俩都在寻找的词是“目录”:D
      • @NiallCairns 同样的事情,没关系。
      【解决方案4】:

      您要做的是将数据库放在 Web 路径下方。例如,如果您的网站位于 www.example.com 并且它指向:/var/www/html

      然后你可以把你的密码文件放到/var/www/password/udb.htm

      然后从您的 php 脚本中以 file_get_contents("../../password/udb.htm") 的形式访问它

      您的脚本可以访问该文件,但您的网络服务不能。

      【讨论】:

        【解决方案5】:

        这会在打开文件之前更改您的文件的权限,并在您关闭文件时删除授权,请确保该文件的网络服务器权限。

        <?php
        
        $file = 'udb.htm';
        chmod($file, 0600);
        $contents = file_get_contents($file);
        chmod($file, 0000);
        
        ?>
        

        【讨论】:

        • 哇,我喜欢这个答案,但我真的认为像我这样的 n00b 应该学习 MySQL 0.o
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 2018-04-17
        • 2020-03-03
        • 1970-01-01
        • 2015-12-18
        相关资源
        最近更新 更多