以安全的方式上传文档

时间:2012-08-31 23:22:05

标签: pdf file-upload

我正在创建一个允许用户将pdf文档上传到私有区域的应用程序。可能会将所有文件上传到/ uploads目录。

是否有任何最佳实践/建议如何以这样的方式命名pdf,这将使得很难猜出其他可下载文档的名称。

我想知道原始文件名加上某种递增ID可能是要走的路吗?

例如:

  • heresmydocument-0.pdf
  • youshouldntguessthis-1.pdf
  • howabouthisone-2.pdf

3 个答案:

答案 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哈希结尾。我认为这很难猜到。