Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security HttpPostedFile.FileName-与IE不同_Security_Browser_File Upload_Httppostedfile - Fatal编程技术网

Security HttpPostedFile.FileName-与IE不同

Security HttpPostedFile.FileName-与IE不同,security,browser,file-upload,httppostedfile,Security,Browser,File Upload,Httppostedfile,当我使用ASP:file控件将文件上传到站点时,IE和Firefox中的FileName属性是不同的。在Firefox中,它只提供文件名,而IE提供文件的完整路径 我通过添加以下代码来解决此问题: Dim FileName As String = file.FileName If FileName.LastIndexOf("\") > 0 Then FileName = FileName.Substring(FileName.LastIndexOf("\") + 1) End If

当我使用ASP:file控件将文件上传到站点时,IE和Firefox中的FileName属性是不同的。在Firefox中,它只提供文件名,而IE提供文件的完整路径

我通过添加以下代码来解决此问题:

Dim FileName As String = file.FileName
If FileName.LastIndexOf("\") > 0 Then
    FileName = FileName.Substring(FileName.LastIndexOf("\") + 1)
End If
但是我不知道为什么不同的浏览器会有不同。有人知道原因吗


谢谢。

这是一个安全/隐私问题,firefox/mozilla做得很好,如果没有外接程序、小程序、silverlight、flash或其他机制,您将无法获得完整路径

以下是有关Mozilla立场的更多信息:

请参阅“安全更改->文件上载字段”部分


我希望IE也会这样做,这样我们就有了一个一致且安全的环境。

在IE8中,这种行为已经改变,它将只传递文件名,而不是完整路径。

详细信息和IE博客文章的链接,讨论IE8的变化:

希望解析出文件名的服务器端应用程序应该检查文件名,但不要期望文件名中有反斜杠

IE8用户设置覆盖:
这是一个简单的解决方法,在IE和Chrome中进行了测试

new FileInfo(myHttpPostedFileBase.FileName).Name

这将确保即使包含路径,也始终只获取文件名。

您还可以使用仅返回文件名的path.GetFileName(file.FileName)。 例如:


如果尝试使用“new FileInfo(filePath)”保存文件名中的冒号,则会导致NotSupportedException。否。我的IE8(无兼容模式)仍然传输整个路径。IIRC它确实通过“整个路径”,但它通过的路径是伪造的。。。它将实际文件名与伪造的默认路径连接起来,以确保与需要完整路径的服务器兼容。默认情况下,IE8仍将在Intranet区域中传输完整路径名。看见此外,“上载文件时包含本地目录路径”URLAction已设置为“禁用”“互联网专区。此更改可防止潜在敏感的本地文件系统信息泄漏到Internet。例如,Internet Explorer 8现在只提交文件名image.png,而不是提交完整路径C:\users\ericlaw\documents\secret\image.png。“@Spud我想您可能误解了该设置的工作原理。在IE8(及更高版本)中,该设置被设置为禁用…如“IE不会发送完整路径”"... @对不起,没有误解:)互联网区域的设置确实关闭了。但是,它仍然为INTRANET区域打开,它将在IE8中发送完整路径。因此,在某些情况下,你仍然会看到这种情况发生。在IE8及以上版本中,默认设置是不发送完整的原始文件路径。IE没有完全“跟进”。IE8及以上版本允许用户在表单字段中选择相对或绝对路径,但它隐藏在安全设置中:仅供参考,我使用的是IE11,它提供了完整路径。这就是我发现这个问题的原因,因为我需要处理它。下面的代码是等效的:
Path.GetFileNameWithoutExtension(myHttpPostedFileBase.FileName)
我没有检查是否有性能差异。@VincentSels这是等效的:
Path.GetFileName(myHttpPostedFileBase.FileName)
,因为它不删除文件扩展名.event,所以这并不是它所帮助的问题的答案。
Dim File As HttpPostedFile = context.Request.Files("txtFile")
' let's FileName is "d:\temp\1.txt"
Dim FileName As String = Path.GetFileName(File.FileName)
' FileName will be "1.txt"