我有一个简单的phpweb应用程序,用户可以在其中上传一个文件。上传的文件可以被其他用户访问。它运行得很好,最近一个用户上传了一个名为filename#2234324的文件。当我通过web应用程序打开这个文件时,它给了我一个错误,文件名不存在。这是由于文件名中存在(#(,浏览器无法正确定位。我该怎么办?我不想更改文件名
#
在URL中具有特殊含义。您需要用它们的编码等价百分比来表示这些字符。
在将文件名添加到URL之前,通过urlencode
传递该文件名。
(当用户上传名为"><script>etc</script>
的文件时,这也将保护您免受XSS的影响(。
我该怎么办?我不想更改文件名
你真的应该这么做。URL的哈希部分不会发送到服务器,而是保留给客户端(浏览器(进行解释。只有协议、服务器、路径名和查询字符串被发送到服务器。
作为任何好的文件上传系统的一部分,您应该强制执行有效的文件名或根据需要修改它们。