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

时间:2011-06-30 19:15:20

标签: php file encryption upload

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

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

总之,我需要知道实现它的最佳方法(即使用哪些函数或类),以便它符合以下标准:

  1. 该功能需要是可逆的,只有通过PHP的$_SESSION变量登录的用户才能解密加密的文件。
  2. 加密需要影响所有文件类型,无论是图像,文本,二进制文件,文档,还是解密文件都必须生成与加密文件相同的文件(即标题完好无损)。
  3. 我可能担心的不仅仅是必要的,但我想在基本安全性的同时尽可能地使用它。我没有保护任何特别重要的信息,例如信用卡信息或商业机密,但我正在设计的用户希望能够安心地知道至少有一些措施以防止黑客上传的文件。

1 个答案:

答案 0 :(得分:13)

base64不是加密。

如果您想要强加密,则需要考虑使用GPG extension

然后您需要仔细考虑您的系统架构。

如果服务器需要加密/解密文件,则密钥需要位于服务器上,并且可由Web服务器进程读取。这意味着如果有人危及您的服务器,他们可能会访问解密文件所需的一切!

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

加密只会在攻击者以某种方式访问​​您的文件存储目录时保存您,但服务器上没有任何其他内容。这是一种非常不可能的情况。

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