1

我正在使用 crypt() ,它在特定情况下使用带有 12 个字符 salt 的 md5 哈希。

这是从 php.net,crypt 文档修改的字符串 crypt() 返回的示例。

$1$rasmusle$rISCgZzpwk3UhDidwX/in0

这是也包括编码类型的盐。

$1$rasmusle$ 

这里是编码类型。(在这种情况下为 MD5)

$1$ 

最后是哈希值。

rISCgZzpwk3UhDidwX/in0

您不能在文件名中使用正斜杠,因为这将被解释为文件夹。

我是否应该简单地删除所有正斜杠,并且 crypt() 使用的字符集是否存在其他问题。

4

4 回答 4

5

看起来您想阻止/允许特定用户访问图像。如果是这种情况,我会执行以下操作:

  1. 将图像存储在文档根目录之外。这确保不能简单地直接请求图像。
  2. 将图像原始名称存储在数据库中,并将sha1_file()哈希存储在同一记录中。如果您的服务器上没有重复图像,这会增加好处。尽管图像很小,但它可以防止系统混乱。
  3. 当有人请求“私人”图像时,他们将通过 PHP 文件请求它,该文件将检查用户是否有权访问该文件,如果有,则提供该文件(来自数据库)。

使用上述方法,您将最大程度地控制谁可以请求图像,您的用户会为此感谢您。

Note: that you cannot simply store all images in the same folder, because all filesystems have limits as to how many files can be stored in a single directory

A simple example of a PHP script that serves an image would look something like the following:

<?php

// always set the header and change it according to the type of the image
header("Content-type: image/jpeg");
echo file_get_contents('/path/to/the/image.jpg');
于 2012-11-26T21:54:08.790 回答
1

/$1$/ - 是一种用于创建哈希的算法

您可以只使用md5 md5_file/sha1 sha1_file函数来创建哈希而不需要额外的信息。除非你想同时使用不同的算法。

于 2012-11-26T21:48:31.117 回答
1

在你的哈希上运行一个 URLEncode 方法,它应该用 %2F 替换所有的 '/' ...我知道这不是一个完美的修复,因为我认为像 apache 服务器这样的东西仍然会阻止任何带有 '%2F 的 Web 请求' 在网址中。只是我在这件事上的 2 美分

于 2012-11-26T21:48:38.340 回答
1

始终规范化用户提供的数据,包括文件名,除非您想通过上传名称包含的文件NULL来欺骗 PHP。指定允许的字符(即 A-Za-z0-9 并将所有其他字符转换为下划线。或使用 sha1/md5 从文件名创建哈希并以该名称存储文件。

编辑

这将用下划线替换除 AZ、az、0-9 之外的所有字符_

$normalizedName = preg_replace('/[^A-Za-z0-9]/', '_', $userProvidedName);
于 2012-11-26T21:49:54.120 回答