【问题标题】:Which characters break URL and is there a maximum length to a URL?哪些字符会破坏 URL,URL 是否有最大长度?
【发布时间】:2013-10-31 13:57:07
【问题描述】:

我在我的网站上使用文件上传,我不明白为什么有些上传无法通过网络浏览器访问,我只能通过 FTP 客户端查看。

我的 php 函数如下所示:

move_uploaded_file($fileTmpLoc, 'uploads/'.date('ymdGis').'-'.substr(str_shuffle(md5(time())),0,4).'-'.str_replace(' ', '-', $fileName))

上传文件时

屏幕截图 2013-10-22 上午 7.14.00.png

结果链接是

/uploads/131022172126-08cd-Screen-Shot-2013-10-22-at-7.13.18-AM.png

是文件的长度还是其他原因导致某些文件无法通过网络浏览器访问。

【问题讨论】:

  • “不可访问”是什么意思,尝试访问它们时会出现什么错误?
  • 你可能会在这里找到一些有用的东西:stackoverflow.com/questions/2668854/…
  • 可能是句号……我过去遇到的其他东西都是大写字母。有很多禁止使用的字符要避免......问号/斜杠等。不过,它似乎在服务器类型之间有所不同。
  • 这里有几个问题。首先,MD5 上的str_shuffle,因为某种“更随机”的机制是荒谬的,请不要那样做。其次,如果我提供的文件名是../../evil.php怎么办?我在你的盒子上执行远程 PHP 代码。哎呀!

标签: php url web-hosting


【解决方案1】:

根据RFC3986 中的定义,以下字符在 URL 中有效:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 - _ . ~

以下字符具有特殊含义,因此是允许的,但在某些地方必须转义。

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

至于最大长度,这个已经在另一个问题中回答的很好了:What is the maximum length of a URL in different browsers?

【讨论】:

  • 这并不能真正解决问题。他使用的所有字符都是完全有效的。然而,现在它确实回答了长度问题。
  • 鉴于他提供的信息,足以告诉他不,破坏它的不是字符或长度。这显然是另一回事。
  • 虽然 RFC3986 是 URL 的标准,但并不一定意味着服务器 100% 兼容。我过去肯定遇到过服务器无法正确响应大写字母的问题。它会上传文件,但如果它有大写字母,它就不允许从 HTTP 端访问它。那是我很久以前使用的一个旧的共享 UNIX 解决方案。不过我最近没有遇到过此类问题 - 近年来情况似乎有所改善。
【解决方案2】:

文件名没有最大长度,但你是一个限制 upload_max_filesize。

http://www.php.net/manual/en/ini.core.php#ini.upload-max-filesize

也许已经达到了极限?

【讨论】:

    【解决方案3】:

    我觉得现在问这个问题很愚蠢

    substr(str_shuffle(md5(time())),0,4)
    

    我在回应同样的事情,但没有意识到随机字符会再次重新生成,因此会回应一个断开的链接。非常抱歉耽误您的时间。

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-15
      • 1970-01-01
      • 2013-01-18
      相关资源
      最近更新 更多