php - 为此目的加密/解密通过 PHP 上传的文件的最佳方法?

标签 php file encryption upload

我正在为需要对用户上传的文件进行基本加密的服务制作文件上传系统原型(prototype)。所有上传的文件都将上传到同一目录,用户可以在该目录中自由下载和上传文件,但只有授权用户才能从上传的文件中删除文件。

考虑到这一点,我需要知道加密这些文件的最佳方法(通过 crypt() 或类似方法),以便为此目的存储在非公共(public)可访问的目录中。我考虑过使用 PHP 内置的 base 64 编码函数来执行此操作,但似乎有人可以在另一台服务器上编写 PHP 脚本以 base 64 解密存储在我服务器上的文件,从而使加密保护完全无用.

总而言之,我需要知道实现它的最佳方法(即使用哪些函数或类),以便它满足以下条件:

  1. 该函数需要以某种方式可逆,只有通过 PHP 的 $_SESSION 变量登录的用户才能解密已加密的文件。
  2. 加密需要影响所有文件类型,无论是图像、文本、二进制文件、文档,并且解密文件必须产生与加密文件相同的文件(即 header 完好无损)。

我可能会担心不必要的事情,但我想让它在基本安全的情况下尽可能易于使用。我不会保护任何特别重要的东西,例如信用卡信息或商业 secret ,但我所设计的用户希望安心地知道至少有一些措施以防止黑客攻击上传的文件。

最佳答案

base64 不是加密。

如果你想要强加密,你会想要考虑使用 GPG extension

那么您需要仔细考虑您的系统架构。

如果服务器需要加密/解密文件,则 key 需要在服务器上,并且可由网络服务器进程读取。这意味着如果有人破坏了您的服务器,他们可能可以访问解密您的文件所需的一切!

更糟糕的是,由于您的 PHP 应用程序驱动加密/解密,攻击者需要做的就是访问您的用户帐户之一。

加密只会在攻击者以某种方式访问​​您的文件存储目录但服务器上没有其他访问权限时拯救您。这是一种不太可能发生的情况。

在您的情况下,磁盘加密听起来有点矫枉过正。如果这些文件不能直接通过网络访问,那可能就足够了。而是专注于确保主机系统安全(更新包、良好的防火墙规则)以及您的应用程序安全(仅在 https 下运行它,使用最佳实践来抵御 SQL 注入(inject)和 CSRF 攻击,需要强密码等)。

关于php - 为此目的加密/解密通过 PHP 上传的文件的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539911/

相关文章:

javascript - 将 FullCalendar 中的 clientEvents 保存在 MySQL/w PHP 中

c# - 在 Xamarin.Forms 中录制语音后如何保存音频文件

r 读入多个 .dat 文件

java - 如何从文件中定义给定大小的数组?

c# - 加密值每次都不会返回相同的值

java - 从 shell 脚本调用 .jar

php - 如何将连接的 MYSQL 字符串查询存储到 PHP 变量中?

PHP file_get_contents() : No Such file or directory

Android AES 加密错误垫 block 损坏

php - 更有效地在彼此内部编写 SQL 行语句