我正在创建一个允许用户将pdf文档上传到私有区域的应用程序。可能会将所有文件上传到/ uploads目录。
是否有任何最佳实践/建议如何以这样的方式命名pdf,这将使得很难猜出其他可下载文档的名称。
我想知道原始文件名加上某种递增ID可能是要走的路吗?
例如:
答案 0 :(得分:2)
原始名称加随机ID。
R := random-integer;
new-filename := original-filename + R;
其中+
表示连接。
这与你的想法基本相同,只是我添加了观察,如果你想让ID 难以猜测,那么让它严格递增有点蠢。
如果您担心rand()
仍然可以猜测,那么请使用SHA1(original-file-contents + R)
而不是R
。但那肯定是矫枉过正的。
编辑:实际上,更好的方法是使用R-original-filename.pdf
,然后实现R-origi.pdf
被视为等同于R-original-filename.pdf
的功能。你会注意到很多新闻网站,包括Reddit,都使用这个成语。它使共享网址更加方便,因为您可以只写http://www.reddit.com/r/programming/comments/z3ha1/how_did_you_know_so_much_about_computers_then_i/而不是写出http://www.reddit.com/r/programming/comments/z3ha1/。我建议你还要求用户输入原始文件名的前几个字符,以阻止随意浏览;但是当然,只需将R
更长的几个字符变为相同的好处即可获得同样的好处。
答案 1 :(得分:1)
如果您有数据库后端,您可能希望在上传时保留文档的详细信息。然后用非常复杂的东西命名文件
3058348113409780784350983450894350809.pdf
然后你可以假设很难猜到。
答案 2 :(得分:0)
你可以使用文件名和md5哈希结尾。我认为这很难猜到。