我正在使用crypt(),在特定情况下使用带有12个字符salt的md5哈希。
以下是从php.net,crypt文档修改的字符串crypt()返回的示例。
$1$rasmusle$rISCgZzpwk3UhDidwX/in0
这是盐,它还包括编码类型。
$1$rasmusle$
这是编码类型。 (在这种情况下为MD5)
$1$
最后是哈希值。
rISCgZzpwk3UhDidwX/in0
您不能在文件名中包含正斜杠,因为这会被解释为文件夹。
我应该简单地删除所有正斜杠,还有crypt()使用的字符集的其他问题。
答案 0 :(得分:5)
您希望阻止/允许特定用户访问该图像。如果是这种情况,我会做以下事情:
sha1_file()
哈希存储在同一记录中。如果您的服务器上没有重复的图像,这会增加好处。虽然图像很小,但可以防止系统混乱。使用上述方法,您可以最大程度地控制谁可以请求图像,您的用户将会感谢您。
注意:您不能简单地将所有图像存储在同一文件夹中,因为所有文件系统都有limits as to how many files can be stored in a single directory
提供图像的PHP脚本的简单示例如下所示:
<?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');
答案 1 :(得分:1)
/ $ 1 $ / - 是用于创建哈希的算法
您可以使用md5
md5_file
/ sha1
sha1_file
函数创建哈希,而无需其他信息。除非你想同时使用不同的算法。
答案 2 :(得分:1)
在哈希上运行URLEncode方法,它应该替换所有&#39; /&#39;使用%2F ...我知道这不是一个完美的解决方案,因为我认为像apache服务器这样的东西仍会阻止任何网页请求与&#39;%2F&#39;在网址中。这件事只需2美分
答案 3 :(得分:1)
始终规范化用户提供的数据,包括文件名,除非您希望通过上传名称包含NULL
的文件来愚弄PHP。指定允许的字符(即A-Za-z0-9并将所有其他字符转换为下划线。或者使用sha1 / md5从文件名创建哈希并以该名称存储文件。
修改强>
这将使用下划线_
替换除A-Z,a-z,0-9之外的所有字符:
$normalizedName = preg_replace('/[^A-Za-z0-9]/', '_', $userProvidedName);