Foros del Web » Programando para Internet » ASP Clásico »

Seguridad en carpetas del servidos vs campo BLOB

Estas en el tema de Seguridad en carpetas del servidos vs campo BLOB en el foro de ASP Clásico en Foros del Web. Hola, tengo algunos documentos e imágenes en mi web que quiero hacer accesibles solo a ciertos usuarios, se que lo más seguro es meterlos en ...
  #1 (permalink)  
Antiguo 25/03/2009, 10:50
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Seguridad en carpetas del servidos vs campo BLOB

Hola, tengo algunos documentos e imágenes en mi web que quiero hacer accesibles solo a ciertos usuarios, se que lo más seguro es meterlos en un campo BLOB de la BD, pero esto ocupa espacio y en el hosting cobran por cada 20MB extra de la BD.

¿Hay otras soluciones? ¿Se puede hacer de alguna forma una carpeta protegida pero que no pida contraseña al acceder a ella si el usuario ya se ha logado en la aplicación? ¿Tal vez alguna utilidad ASP (no DLL) para encriptar fotos y documentos?

Gracias
  #2 (permalink)  
Antiguo 25/03/2009, 16:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Bueno, lo de las imagenes queda claro, no solo por el dinero sino por que la esencia de las tablas no es como repositorios de archivos

Lo de las carpetas pues es bastante seguro, colocas tu carpeta fuera de la raíz de tu servidor y tu haces las redirecciones a los archivos que quieras descargar desde ASP, no se como sea exactamente lo que ocupas pero una idea básica es tener un archivo ASP que descargue cualquier tipo de documento, tu le mandas un parámetro a esa página y buscas el archivo correspondiente en alguna tabla. O puedes implementarte alguna otra mecánica de seguridad.

Saludos
  #3 (permalink)  
Antiguo 26/03/2009, 06:44
Avatar de Muzztein  
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Buena idea la de my akire


para continuar su idea, podrias hacer esto

Ponés en un archivo llamado foto.asp

la siguiente insturccion

Código asp:
Ver original
  1. <%
  2. if session("logged") = true then
  3. response.redirect("poner ruta aca de la foto en direcotrio fuera de la carpeta  www")
  4. else
  5. 'alguna otra cosa
  6. end if
  7.  
  8. %>
luego cuango llamas a la imagen, colocas

Código PHP:
<img src="foto.asp"/> 
y voilá
  #4 (permalink)  
Antiguo 26/03/2009, 06:55
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Saludos y gracias a los dos por la propuesta, pero me encuentro el siguiente problema:

Si el documento (en esta caso son PDF y JPG) está fuera de la raíz del servidor (entiendo que fuera de la carpeta html del hosting) tengo los siguientes problemas:
  1. ¿Como puedo hacer referencia a esa carpeta desde un script ASP? ¿Funcionará Server.Mappath("/") & "..\micarpeta\" & miarchivo?
  2. El panel de control del hosting sólo me deja asignar permisos a carpetas dentro del servidor (subcarpetas de html), ¿como dar permisos de acceso (recuerda que es un script asp el que escribe y lee ese archivo) a esta carpeta de fuera?

Gracias
  #5 (permalink)  
Antiguo 26/03/2009, 12:10
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Bueno, salvo la mejor opinión de Muzztein lo de la carpeta fuera del servidor es para asegurarse que alguien que se sepa la ruta no pueda brincarse la aplicación, no es indispensable si implementas un archivo "genérico" ya que la ruta no saldría en la barra de direcciónes, pero por mayor seguridad mejor pregúntale a tu host si tienes la posibilidad de colocar archivos fuera, lo del doble punto para hacer referencia rutas relativas, casi seguro que lo han deshabilitado.

El punto dos, si tienes que trabajar con tu carpeta dentro de raíz del sitio ya no aplica, la idea puediera ser algo como esto:
Código ASP:
Ver original
  1. <&#37;
  2. ...... validaciones de seguridad y todo eso
  3. Response.Buffer = True
  4. Dim strFilePath, strFileSize, strFileName
  5. Const adTypeBinary = 1
  6.  
  7. vFile = Request.QueryString("Id")
  8.  
  9. ..... buscas ese ID en alguna tabla
  10.  
  11. strFilePath = rs("Path")
  12. strFileSize = rs("Size")
  13. strFileName = rs("FileName")
  14.  
  15. Response.Clear
  16.  
  17. Set objStream = Server.CreateObject("ADODB.Stream")
  18. objStream.Open
  19. objStream.Type = adTypeBinary
  20. objStream.LoadFromFile strFilePath
  21. strFileType = lcase(Right(strFileName, 4))
  22. Select Case strFileType
  23.   Case ".asf"
  24.     ContentType = "video/x-ms-asf"
  25.   Case ".avi"
  26.     ContentType = "video/avi"
  27.   Case ".txt"
  28.     ContentType = "text/plain"
  29.   Case ".doc"
  30.     ContentType = "application/msword"
  31.   Case ".zip"
  32.     ContentType = "application/zip"
  33.   Case ".xls"
  34.     ContentType = "application/vnd.ms-excel"
  35.   Case ".gif"
  36.     ContentType = "image/gif"
  37.   Case ".jpg", "jpeg"
  38.     ContentType = "image/jpeg"
  39.   Case ".wav"
  40.     ContentType = "audio/wav"
  41.   Case ".mp3"
  42.     ContentType = "audio/mpeg3"
  43.   Case ".mpg", "mpeg"
  44.     ContentType = "video/mpeg"
  45.   Case ".rtf"
  46.     ContentType = "application/rtf"
  47.   Case ".htm", "html"
  48.     ContentType = "text/html"
  49.   Case ".asp"
  50.     ContentType = "text/asp"
  51.   Case ".pdf"
  52.     ContentType = "application/pdf"
  53.   Case Else
  54.     'Handle All Other Files
  55.     ContentType = "application/octet-stream"
  56. End Select
  57. Response.AddHeader "Content-Disposition", "attachment; filename=" & strFileName
  58. Response.AddHeader "Content-Length", strFileSize
  59. Response.Charset = "UTF-8"
  60. Response.ContentType = ContentType
  61. Response.BinaryWrite objStream.Read
  62. Response.Flush
  63. objStream.Close
  64. Set objStream = Nothing
  65. %>

Saludos
  #6 (permalink)  
Antiguo 27/03/2009, 03:14
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Claro!!

Puedo guardarlo dentro del servidor y para evitar que alguien que conozca la ruta* descargue el fichero, lo guardo con extensión ASP en lugar de PDF, y después lo descargo con tu función con ContentType = "application/pdf", perfecto!!! eso sería perfectamente seguro ¿no? ya que al tener extensión ASP si se introdujera la url directamente intentaría interpretarlo en lugar de descargarlo, no?

* por ejemplo, si alguien le instala un spyware al usuario podría adivinar la ruta del pdf

Muchas gracias
  #7 (permalink)  
Antiguo 27/03/2009, 08:01
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

No lo he hecho antes, pero cuestión de probar

Nos avisas como te va con eso .
  #8 (permalink)  
Antiguo 28/03/2009, 11:08
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años, 5 meses
Puntos: 9
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Pues funcionó perfecto, aquí va un resumen...

Genero el PDF y lo guardo en una ruta con extensión ASP en lugar de PDF:


Código asp:
Ver original
  1. ruta = "/informes/F" & destino & ".asp"
  2. pdf.Save(ruta)

Para leer ese fichero utilizo una simplifaicación del código de Myakire (por legibilidad he quitado las comprobaciones de que el fichero existe, etc):

Código asp:
Ver original
  1. Response.Clear
  2.  
  3. Set objStream = Server.CreateObject("ADODB.Stream")
  4. objStream.Open
  5. objStream.Type = adTypeBinary
  6. objStream.LoadFromFile Server.mappath("/informes/F" & [B]destino [/B]& ".asp")
  7.            
  8. Response.Clear
  9. '*********************
  10. 'AL nombre del fichero le pongo extenison PDF en lugar de ASP para que
  11. 'el cambio de extension sea transparente al usuario
  12. '*********************
  13. Response.AddHeader "Content-Disposition", "attachment; filename="&destino &".pdf"
  14. Response.Charset = "UTF-8"
  15. Response.ContentType = "application/pdf"
  16. Response.BinaryWrite objStream.Read
  17. Response.Flush
  18. objStream.Close

Si en el navegador intento meter directamente la ruta del fichero "/informes/F" & destino & ".asp" obtengo el siguiente error, por lo tanto nadie podrá acceder a ese informe directamente.

Cita:
Tipo de error:
Páginas Active Server, ASP 0116 (0x80004005)
El bloque Script no contiene la etiqueta de cierre de la secuencia de comandos (%>).
/informes/fichero.asp, línea 637
Perfecto
  #9 (permalink)  
Antiguo 28/03/2009, 23:26
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Seguridad en carpetas del servidos vs campo BLOB

Me alegro que te haya funcionado la idea, la implementación parece ser que te quedó perfecta
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:22.