Pregunta

Tengo una carpeta en mi servidor web que los usuarios usan para cargar fotos usando una página ASP.

¿Es lo suficientemente seguro otorgar permisos de escritura a IUSR en la carpeta?¿Debo asegurar algo más?Tengo miedo de que los piratas informáticos pasen por alto la página ASP y carguen contenido directamente en la carpeta.

Estoy usando ASP clásico e IIS6 en Windows 2003 Server.La carga se realiza a través de HTTP, no de FTP.

Editar:Cambiando la pregunta para mayor claridad y cambiando mis respuestas como comentarios.

¿Fue útil?

Solución

Además, recomendaría no permitir que los usuarios carguen archivos en una carpeta a la que se pueda acceder desde la web.Incluso la mejor detección de tipo MIME puede fallar y usted no desea en absoluto que los usuarios carguen, digamos, un ejecutable disfrazado de jpeg en el caso de que su rastreo MIME falle, pero el de IIS funcione correctamente.

En el mundo PHP es aún peor, porque un atacante podría cargar un script PHP malicioso y luego acceder a él a través del servidor web.

Siempre, siempre guarde los archivos cargados en un directorio en algún lugar fuera de la raíz del documento y acceda a ellos a través de algún script de acceso que realice una desinfección adicional (y al menos establezca explícitamente una imagen/cualquier tipo de MIME.

Otros consejos

¿Cómo subirá el usuario las fotos?Si está escribiendo una página ASP para aceptar los archivos cargados, entonces sólo el usuario que ejecuta IIS necesitará permiso de escritura en la carpeta, ya que IIS realizará la E/S del archivo.Su página ASP debe verificar el tamaño del archivo y tener alguna forma de autenticación para evitar que los piratas informáticos llenen su disco duro.

Si está configurando un servidor FTP o algún otro método de transferencia de archivos, la respuesta será específica del método que elija.

Tendrá que otorgar permisos de escritura, pero puede verificar el tipo mime del archivo para garantizar una imagen.Puedes usar FSO así:

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

Además, la mayoría de los objetos COM cargados tienen una propiedad de tipo que puede comparar antes de escribir el archivo.

Su mejor inversión probablemente sería usar un componente de carga (he usado ASPUpload) que le permita cargar/descargar archivos desde una carpeta a la que no se puede acceder desde el sitio web.

Obtendrá algunos ganchos de autenticación y no tendrá que preocuparse de que alguien explore casualmente la carpeta y descargue los archivos (o los cargue en su caso), ya que los archivos solo están disponibles a través del componente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top