Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   ASP Clásico (http://www.forosdelweb.com/f15/)
-   -   Seguridad Web (http://www.forosdelweb.com/f15/seguridad-web-584716/)

RollerSky 09/05/2008 11:52

Seguridad Web
 
Hola.. de nuevo por aqui,
bueno antes que nada estoy haciendo una web donde se descarga contenido, pero ese contenido solo lo pueden descargar aquellos usuarios que esten logueados y tengan un codigo de seguridad, mi pregunta es.. ¿ como puedo proteger la carpeta donde se almacena este contenido privado, ya que facilmente podrian copiar la url de la carpeta y extraer el contenido,? he visto en varias paginas que si uno intenta ingresar a esa carpeta le pide un user o pass o simplemente da un error de url no encontrada.

Estuve leyendo un poco acerca de los "htaccess" los probe y funcionó me protegio la carpeta, el unico detalle era que no me dejaba entrar ponia el user y pass CORRECTOS y no podia acceder a la carpeta, si este metodo sirviera necesitaria que al loguearse un usuario pudiera ingresar sin colocar ningun user ni password es decir:

cuando un usuario se inicie sesion pueda hacer las descargas pero no pueda acceder a esa carpeta directamente digitando la URL asi mismo para los usuarios que no han iniciado sesion.

espero me ayuden si saben de algun metodo para proteger contenido o bien si me ayudan con el metodo de los "htaccess", lo necesito hacer todo en ASP


salu2

Myakire 09/05/2008 14:19

Re: Seguridad Web
 
Otra cosa que puedes hacer es poner un programa que con algunos parámetros no sensibles (nombre del archivo, tipo, etc) este sea el que mande el contenido al browser, así en la URL lo más que el usuario podría ver es la llamada a ese programa.

i_e_s27 09/05/2008 19:43

Re: Seguridad Web
 
Crea una pagina que te redireccione al archivo que quiera bajar en cuestion.
Asignale a cada archivo un ID para identificarlos.

Entonces quedaria algo asi:

tracker.asp?id=001

y en esa pagina haces un Server.Transfer al archivo que quiera bajar. Por que Server.Transfer y no Response.Redirect? Porque mantiene la URL en el explorador, entonces es un poquito mas dificil de "robar"

:adios:

RollerSky 10/05/2008 23:36

Re: Seguridad Web
 
mm interesantes esas opciones pero me gustaria escuchar mas opiuniones para ver cual aplico, agradezco a los que me han respondido

salu2

RollerSky 12/05/2008 08:57

Re: Seguridad Web
 
mas ideas? :)

Myakire 12/05/2008 10:01

Re: Seguridad Web
 
Eso funciona, no ocupas más ideas para solo asegurar la descarga sin acceso directo por URL

ivanargulo 14/05/2008 04:16

Re: Seguridad Web
 
Añade un archivo Robots.txt para evitar que google indexe los contenidos de la carpeta que no quieres hacer pública.

3pies 14/05/2008 09:45

Re: Seguridad Web
 
Créate una carpeta al mismo nivel que tienes tu carpeta con datos (root), y le das permisos de lectura. De tal forma que tendrás 2 carpetas, una con todos tud ficheros asp y html, y otra con los documentos para descargar. La primera de las carpetas es accesible vía http, y la otra no.

Salu2

Shiryu_Libra 14/05/2008 10:43

Re: Seguridad Web
 
Cita:

Iniciado por 3pies (Mensaje 2404313)
Créate una carpeta al mismo nivel que tienes tu carpeta con datos (root), y le das permisos de lectura. De tal forma que tendrás 2 carpetas, una con todos tud ficheros asp y html, y otra con los documentos para descargar. La primera de las carpetas es accesible vía http, y la otra no.

Salu2

eso es interesante, si el usuario escribe directamente no podra descargar archivos? tendria que ser vinculado?

:pensando:

u_goldman 14/05/2008 11:49

Re: Seguridad Web
 
Cita:

Iniciado por i_e_s27 (Mensaje 2398045)
Crea una pagina que te redireccione al archivo que quiera bajar en cuestion.
Asignale a cada archivo un ID para identificarlos.

Entonces quedaria algo asi:

tracker.asp?id=001

y en esa pagina haces un Server.Transfer al archivo que quiera bajar. Por que Server.Transfer y no Response.Redirect? Porque mantiene la URL en el explorador, entonces es un poquito mas dificil de "robar"

:adios:


Y de ser posible coloca el directorio fuera del sitio, de esa manera los archivos no pueden ser accesibles por URL.

Por lo del htaccess, eso es un tema de apache, no existe para IIS, aunque no dudo que existan herramientas que emulen esto.

Saludos

3pies 15/05/2008 08:43

Re: Seguridad Web
 
Cita:

Iniciado por Shiryu_Libra (Mensaje 2404446)
eso es interesante, si el usuario escribe directamente no podra descargar archivos? tendria que ser vinculado?

:pensando:

Exacto. Solo puedes descargar linkando a esa carpeta (la cual está oculta, y en principio nadie conoce, ni su nombre, ni el nombre de los archivos que hay dentro).

AlZuwaga 15/05/2008 10:30

Re: Seguridad Web
 
Cita:

Iniciado por 3pies (Mensaje 2405978)
Exacto. Solo puedes descargar linkando a esa carpeta (la cual está oculta, y en principio nadie conoce, ni su nombre, ni el nombre de los archivos que hay dentro).

Peroooo... si está por fuera del root (a su mismo nivel)... ¿cómo vas a acceder a los archivos?

3pies 15/05/2008 11:03

Re: Seguridad Web
 
Solo puedes acceder a ellos linkándolos desde una página (esta página evidentemente está dentro del root), ya que no son accesibles vía http (esto solo está reservado a los archivos que hay dentro del root).

Ejemplo de carpetas:

<root>
<descargas>

Ahora imagina que desde el index.asp que cuelga directamente del root, quieres descargar un fichero que hay en <descargas>. Pues simplemente montas un enlace del tipo:

<a href="../descargas/archivo.zip">descargar fichero</a>

Si tipeas en la barra de direcciones algo como esto: http://www.tuweb.com/descargas/archivo.zip daría error, porque no se econtraría el documento, ya que tuweb.com apunta al root, y dentro del root no hay una carpeta llamada descargas, sino que está fuera, a su mismo nivel (habrá que darle permisos a esa carpeta, si deseas subir ficheros, si deseas permitir la descarga, y demás).

Salu2

AlZuwaga 15/05/2008 12:00

Re: Seguridad Web
 
:pensando:

Lo acabo de intentar con IIS y Apache y en ambos el enlace a <a href="../carpeta/archivo.doc">descargar</a> me lleva a http://localhost/carpeta/archivo.doc. Claro que esa ruta no existe, por tanto me da un error 404.

¿Estaré haciendo algo mal?

3pies 15/05/2008 12:13

Re: Seguridad Web
 
Te tiene que funcionar, porque las descargas de la web de mi firma funcionan así (con alguna cosilla adicional, como renombrar el fichero, por ejemplo).

EDITADO: Es que me había dado cuenta que había dicho una sandez.

AlZuwaga 15/05/2008 12:54

Re: Seguridad Web
 
En la sección de descargas de tu sitio (http://con2huevos.com/con2huevos/descargas/descargas.asp) veo por ejemplo este enlace:

Código:

http://con2huevos.com/con2huevos/general/download.asp?archivo=con2huevos-calculadoradelimc.zip&Fichero=../../../download/con2huevos-calculadoradelimc.zip&Nombre=con2huevos-1.zip&Tamanio=11144
Supongo yo que la carpeta download está al mismo nivel que el root de tu sitio. Pero no es el enlace html quien accede al archivo ubicado en esa carpeta sino el script que tenés en download.asp. Creo que con esto quedaría demostrado que el <a href="../carpeta_al_mismo_nivel_del_root/archivo.ext"> no funciona :-)

Ahora bien, te vuelvo a citar:

Cita:

Exacto. Solo puedes descargar linkando a esa carpeta (la cual está oculta, y en principio nadie conoce, ni su nombre, ni el nombre de los archivos que hay dentro).
Si le paso por mail a un amigo esa dirección (que contiene un documento supersecreto :-) que sólo debe ser descargado desde tu sitio) lo podrá bajar haciendo click en el enlace o copiando y pegándolo en la barra de direcciones de su browser. Se me ocurre que deberías verificar que el referer no sea nulo ni distinto a tu dominio para asegurar la cosa.

3pies 16/05/2008 02:48

Respuesta: Re: Seguridad Web
 
Cita:

Iniciado por Al Zuwaga (Mensaje 2406628)
Supongo yo que la carpeta download está al mismo nivel que el root de tu sitio. Pero no es el enlace html quien accede al archivo ubicado en esa carpeta sino el script que tenés en download.asp. Creo que con esto quedaría demostrado que el <a href="carpeta_al_mismo_nivel_del_root/archivo.ext"> no funciona :-)

Efectivamente, la carpeta download está al mismo nivel que el root. Hace 2 años que lo monté y la verdad es que no recordaba si era link directo o no. Y efectivamente, no es un link directo. Se accede al fichero a través de ese script que hay en download.asp, y el cual fuerza la descarga del fichero (al menos muestra la ventana de abrir/descargar, para que el usuario elija, e impedir que se cargue directamente en pantalla el fichero, si se trata por ejemplo de una imagen, un pdf, o un doc, por poner tres ejemplos).

Acabo de revisar todo, y he probado con otro ejemplo más sencillo. Créate una carpeta llamada <descargas>, al mismo nivel de tu root, y mete dentro un fichero llamado ejemplo.zip

Ahora en una página llamada prueba.html, y que cuelga del root directamente pones solo este link a otro fichero llamado bajarficheros.asp:
Código:

<a href="bajarficheros.asp?fichero=../descargas/ejemplo.zip&Nombre=Al-Zuwaga.zip&Tamanio=20000">descargar</a>
Explicación de las variables:

fichero = nombre original del archivo.
nombre = nuevo nombre con el que queremos descargar el fichero.
tamanio = tamaño del fichero (para informar en la ventana cuando se descarga, y saber el tiempo estimado de la descarga).

Ahora en el fichero llamado bajarficheros.asp, que está en el root colgando directamente de él, coloca este código:
Código:

<%
Response.Buffer=True
Dim strFilePath, strFileSize, strFileName
Const adTypeBinary = 1
strFilePath = Request.QueryString("Fichero")
strFileSize = Request.QueryString("Tamanio")
strFileName = Request.QueryString("Nombre")
Response.Clear
'*******************************
' Requiere MDAC 2.5 o superior
'*******************************
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile Server.MapPath(strFilePath)
strFileType = lcase(Right(strFileName, 4))
'Se pueden añadir otros Content-Types de ficheros, aquí
Select Case strFileType
Case ".asf"
ContentType = "video/x-ms-asf"
Case ".avi"
ContentType = "video/avi"
Case ".doc"
ContentType = "application/msword"
Case ".zip"
ContentType = "application/zip"
Case ".xls"
ContentType = "application/vnd.ms-excel"
Case ".gif"
ContentType = "image/gif"
Case ".jpg", "jpeg"
ContentType = "image/jpeg"
Case ".wav"
ContentType = "audio/wav"
Case ".mp3"
ContentType = "audio/mpeg3"
Case ".mpg", "mpeg"
ContentType = "video/mpeg"
Case ".rtf"
ContentType = "application/rtf"
Case ".htm", "html"
ContentType = "text/html"
Case ".asp"
ContentType = "text/asp"
Case Else
'Otros ficheros
ContentType = "application/octet-stream"
End Select
Response.AddHeader "Content-Disposition", "attachment; filename=" & strFileName
Response.AddHeader "Content-Length", strFileSize
Response.Charset = "UTF-8"
Response.ContentType = ContentType
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close
Set objStream = Nothing
%>

Luego cliquea en el enlace, y te forzará la descarga del fichero que tienes en la carpeta <descargas>, y al que le cambiará el nombre, poniéndole Al-Zuwaga.zip (pese a llamarse realmente ejemplo.zip).
Cita:

Iniciado por Al Zuwaga (Mensaje 2406628)
Si le paso por mail a un amigo esa dirección (que contiene un documento supersecreto :-) que sólo debe ser descargado desde tu sitio) lo podrá bajar haciendo click en el enlace o copiando y pegándolo en la barra de direcciones de su browser. Se me ocurre que deberías verificar que el referer no sea nulo ni distinto a tu dominio para asegurar la cosa.

Sí, claro que podrá descargarlo, porque son ficheros públicos, y de secreto tienen poco :borracho:.

Si no quieres que tu amigo se los baje, simplemente en el fichero bajarficheros.asp, antes de ese código, controlas si tiene su sesión como usuario validado (o su cookie, si lo prefieres) -para el caso de que sea un usuario registrado/validado quien solo pueda bajarse el fichero-, y si no lo tiene, pues no ejecutas el código, y lo redireccionas al index, por ejemplo:
Código:

<%if session("usuariovalidado") = true then
      'aquí viene el código anterior para forzar la descarga del fichero
else
      response.redirect "index.asp"
end if
%>

Salu2 master.

PD1: Edito para comentar, que si no quieres pasar por el querystring el nombre de la carpeta (en el ejemplo: descargas), puedes omitirlo, pasando solo el nombre del fichero (ejemplo.zip). En este caso, en la página bajarficheros.asp, solo tienes que concatenar el nombre de la ruta y el fichero así:

strFilePath = "../descargas/" & request.querystring("fichero")

Y así ya tienes la carpeta oculta ocultísima, y aunque se vea el nombre del fichero en el enlace, da igual, porque nadie sabe en qué carpeta está (y si a la carpeta la llamas "laabuelafumamaria", seguro que nadie da con ella :-)).

PD2: En el fichero bajarficheros.asp, puedes implemenetar más cosas, como sumar 1 hit a las descargas que haya, etc.

AlZuwaga 16/05/2008 09:03

Respuesta: Seguridad Web
 
Ahora si estamos, y creo que esto resuelve definitivamente la duda de RollerSky.
Un saludo!


La zona horaria es GMT -6. Ahora son las 23:51.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.