security browser file-upload httppostedfile

security - HttpPostedFile.FileName-Diferente de IE



browser file-upload (4)

Cuando cargo un archivo en un sitio usando ASP: Control de archivos, la propiedad FileName es diferente en IE y Firefox. En Firefox, simplemente proporciona el nombre del archivo, pero IE proporciona la ruta completa al archivo.

He solucionado esto agregando el código:

Dim FileName As String = file.FileName If FileName.LastIndexOf("/") > 0 Then FileName = FileName.Substring(FileName.LastIndexOf("/") + 1) End If

Pero no estoy seguro de por qué eso sería diferente entre los diferentes navegadores. ¿Alguien sabe el motivo de esto?

Gracias.


En IE8, este comportamiento ha cambiado y SÓLO pasará el nombre del archivo, no la ruta completa. ;-)

Detalles y enlace a la publicación del blog de IE sobre el cambio en IE8: http://blogs.msdn.com/b/webtopics/archive/2009/07/27/uploading-a-file-using-fileupload-control-fails-in-ie8.aspx

Las aplicaciones Serverside que buscan analizar el nombre del archivo deberían verificar, pero no esperar que haya barras diagonales inversas en el nombre del archivo.

Supresión de configuración de usuario de IE8: http://blogs.msdn.com/blogfiles/webtopics/WindowsLiveWriter/UploadingafileusingFileUploadcontrolfail_167/clip_image002_2.jpg


Esta es una cuestión de seguridad / privacidad, Firefox / Mozilla lo está haciendo bien y no obtendrá la forma de obtener la ruta completa sin un complemento, applet, Silverlight, flash u otro mecanismo.

Aquí hay más información sobre la postura de Mozilla:

https://developer.mozilla.org/en/Updating_web_applications_for_Firefox_3

Consulte la sección sobre Cambios de seguridad-> Campos de carga de archivos

Espero que IE siga el ejemplo para que tengamos un entorno coherente y seguro.


También puede usar Path.GetFileName (File.FileName) que devuelve solo el nombre del archivo. Ejemplo:

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"


Una solución simple para esto probado en IE y Chrome

new FileInfo(myHttpPostedFileBase.FileName).Name

Esto asegurará que siempre obtenga el nombre del archivo, incluso si la ruta está incluida.