Foros del Web » Administración de Sistemas » Apache »

Impedir que se vea cierto contenido

Estas en el tema de Impedir que se vea cierto contenido en el foro de Apache en Foros del Web. Hola forosdelweb :). Mi duda es la siguiente: ¿cómo puedo hacer que un usuario no pueda ver una imagen de mi web? Es decir, si ...
  #1 (permalink)  
Antiguo 20/09/2012, 12:10
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Pregunta Impedir que se vea cierto contenido

Hola forosdelweb :).

Mi duda es la siguiente: ¿cómo puedo hacer que un usuario no pueda ver una imagen de mi web? Es decir, si tengo las imágenes en /www/images, ¿cómo puedo hacer para que no todos (dependiendo de por ejemplo si están registrados, de si aparecen en X tabla de MySQL, etc.) vean esas imágenes simplemente ingresando la URL correcta de la imagen (ejemplo: https://www.web.com/images/pepe.png)?

Gracias de antemano.
  #2 (permalink)  
Antiguo 20/09/2012, 12:33
 
Fecha de Ingreso: octubre-2010
Mensajes: 374
Antigüedad: 13 años, 6 meses
Puntos: 34
Respuesta: Impedir que se vea cierto contenido

Eso de si estan o no registrados es más un poco de programación, no veo por ningún lado como hacerlo en el servidor, deberías consultar en el área de programación.

Si usas wordpress, SMF, Vbulletin etc es posible, o sea que dependerá de tu sistemas o script que uses, ahí podrás definir algo tipo if is_guest no mostrar la imagen, if tiene_X_rango no mostrar la imagen etc etc.


A nivel de apache precisamente solo hay dos formas de hacer, poner contraseña a la carpeta o bloquear la ip en htaccess, más no podrás hacer.
  #3 (permalink)  
Antiguo 20/09/2012, 15:52
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

Cita:
Iniciado por skamasle Ver Mensaje
Eso de si estan o no registrados es más un poco de programación, no veo por ningún lado como hacerlo en el servidor, deberías consultar en el área de programación.

Si usas wordpress, SMF, Vbulletin etc es posible, o sea que dependerá de tu sistemas o script que uses, ahí podrás definir algo tipo if is_guest no mostrar la imagen, if tiene_X_rango no mostrar la imagen etc etc.


A nivel de apache precisamente solo hay dos formas de hacer, poner contraseña a la carpeta o bloquear la ip en htaccess, más no podrás hacer.

Ya, pero esos sistemas web están programados para hacer eso... Y yo me puedo montar un foro Joomla (por ejemplo) en un servidor Apache, entonces habrá alguna forma seguro...
La cosa sería hacer que a cada URL de la web que accedas, se ejecute un script en PHP (por ejemplo) que compruebe si estás baneado o no (todo esto mediante htaccess), si lo estás te muestra un mensaje desde PHP, y sinó se muestra la página a la que has accedido...
La cuestión ahora es... ¿cómo? :S.
  #4 (permalink)  
Antiguo 21/09/2012, 07:06
 
Fecha de Ingreso: octubre-2010
Mensajes: 374
Antigüedad: 13 años, 6 meses
Puntos: 34
Respuesta: Impedir que se vea cierto contenido

Pues me parece que no puedes hacer eso así, no tiene mucha relación con apache y htaccess, si no sería más bien con PHP y Mysql, al menos yo no sabría decirte como hacer que php compruebe el .htaccess para ver si un user esta baneado etc etc.

Así que te recomiendo que expongas tu duda en el foro de programación de PHP, ya yo en los años que llevo administrando servidores no he visto tal cosa, apache solo es un web server, puede restringir acceso si, puedes hacer una condición con rewrite algo así:

Baneas una IP en htaccess, si la IP esta baneada y va a acceder a un contenido le haces el rewrite para que muestre otra imagen, algo así sería.

Con php y mysql es más sencillo.
  #5 (permalink)  
Antiguo 21/09/2012, 08:47
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

Cita:
Iniciado por skamasle Ver Mensaje
Pues me parece que no puedes hacer eso así, no tiene mucha relación con apache y htaccess, si no sería más bien con PHP y Mysql, al menos yo no sabría decirte como hacer que php compruebe el .htaccess para ver si un user esta baneado etc etc.

Así que te recomiendo que expongas tu duda en el foro de programación de PHP, ya yo en los años que llevo administrando servidores no he visto tal cosa, apache solo es un web server, puede restringir acceso si, puedes hacer una condición con rewrite algo así:

Baneas una IP en htaccess, si la IP esta baneada y va a acceder a un contenido le haces el rewrite para que muestre otra imagen, algo así sería.

Con php y mysql es más sencillo.
Buenas, primero que nada muchas gracias por contestar.

Sí... ¿Me puedes poner un ejemplo de htaccesss para los siguientes casos, por favor?

1. Que al entrar a la web se ejecute un .php SIEMPRE.
2. Que si estás baneado, rewrite localhost/baneado.html
3. Que si tu IP NO está en una lista que yo haya creado en el htaccess, rewrite localhost/no-permitido.html (la más interesante)

Muchas gracias.


De todas formas, tuenti usa Apache y no deja ver las imágenes de otros usuarios que no tengas agregado. O sea, que poderse, se puede...

Última edición por kies89; 21/09/2012 a las 09:49
  #6 (permalink)  
Antiguo 21/09/2012, 16:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Impedir que se vea cierto contenido

Cita:
Iniciado por kies89 Ver Mensaje
Hola forosdelweb :).

Mi duda es la siguiente: ¿cómo puedo hacer que un usuario no pueda ver una imagen de mi web? Es decir, si tengo las imágenes en /www/images, ¿cómo puedo hacer para que no todos (dependiendo de por ejemplo si están registrados, de si aparecen en X tabla de MySQL, etc.) vean esas imágenes simplemente ingresando la URL correcta de la imagen (ejemplo: https://www.web.com/images/pepe.png)?

Gracias de antemano.
Una forma posible es contolar el referer desde .htaccess, y si este no corresponde a una página específica, inhabilitar la visualización. tené en cuenta que si se ingresa directamente la url en la barra de direcciones, la variable referer no existe.
El resto, por supuesto dependerá del sistema de login que implementes

Ejemplo, en tu carpeta de imagenes

# en la primera linea definis la url de la página autorizada
Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^http://emprear.com/index.html" local_ref=1
  2. <filesMatch "\.(jpg|gif|png)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </filesMatch>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 22/09/2012, 06:50
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Pregunta Respuesta: Impedir que se vea cierto contenido

Cita:
Iniciado por emprear Ver Mensaje
Una forma posible es contolar el referer desde .htaccess, y si este no corresponde a una página específica, inhabilitar la visualización. tené en cuenta que si se ingresa directamente la url en la barra de direcciones, la variable referer no existe.
El resto, por supuesto dependerá del sistema de login que implementes

Ejemplo, en tu carpeta de imagenes

# en la primera linea definis la url de la página autorizada
Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^http://emprear.com/index.html" local_ref=1
  2. <filesMatch "\.(jpg|gif|png)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </filesMatch>

Saludos


En una palabra: P E R F E C T O

Ahora si yo adapto el código a mi web, está bien así?

Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^https://www.miweb.com/visualizar-imagen.php" imagen=1
  2. <filesMatch "\.(jpg|gif|png)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </filesMatch>

imagen es la variable de mi página PHP, y el uno (1) ese? qué hace ahí?



Por otra parte, utilizaré (cuando me aclares las dudas jeje) eso para que otras webs no puedan ver mis imágenes, y aparte:

Código Apache:
Ver original
  1. <filesMatch "\.(gif|png)$">
  2. deny from all
  3. </filesMatch>

Y acceder a mis imágenes mediante PHP...
Pero cómo modificaría este último código para que:
No deje acceder a ninguna página (Y SOLO DESDE https://www.miweb.com/.........................? con ninguna extensión (exceptuando los .php y los .css?

Muchas gracias de antemano.
  #8 (permalink)  
Antiguo 22/09/2012, 07:20
 
Fecha de Ingreso: octubre-2010
Mensajes: 374
Antigüedad: 13 años, 6 meses
Puntos: 34
Respuesta: Impedir que se vea cierto contenido

Ahora no entiendo bien lo que quieres hacer, una protección hotlink también ? -> http://www.webtaller.com/construccio...hotlinking.php

Por otro lado, arriba dices sobre tuenti, pero tuenti lo hace por PHP todo esto, en htaccess no puedes definir usuarios ni esas cosillas de una forma avanzada y segura así como lo hacen las redes sociales, todo es por php + mysql, si no como ya te han dicho antes el refer desaparece si se accede directamente al archivo, aunque, se puede hacer también que no se muestre nada si el reffer es nulo o sea cuando se accede directamente.

Si en tu web hay usuarios y demás y quieres que lo que tenga un usuario no lo pueda ver otro, tienes que hacerlo por PHP, en el área de programación te lo explicarán mejor.

Esto que dices:
Cita:
1. Que al entrar a la web se ejecute un .php SIEMPRE.
2. Que si estás baneado, rewrite localhost/baneado.html
3. Que si tu IP NO está en una lista que yo haya creado en el htaccess, rewrite localhost/no-permitido.html (la más interesante)
Tienes que hacerlo con php, python, java, algo por el estilo, para apache es un poco complicado, es un servidor web, manda el contenido, puedes hacer rewrites, si, pero si vas a tener miles de rewrites apache no funcionara tan rápido como se espera, ya es lento por usar htaccess y con muchos rewrites ira más lento aún.
  #9 (permalink)  
Antiguo 22/09/2012, 08:07
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Impedir que se vea cierto contenido

Coincido con @skamasle, tenés que definir bien que querés hacer. No sea cosa que termines bloqueandote a ti mismo

en mi ejemplo solo asignamos un valor a local_ref cuendo el referer es el definido, luego hacemos un allow solo para esa variable de entorno.

No es exactamente lo mismo que una protección para hotlink.
Si querés algo para eso,
Código Apache:
Ver original
  1. RewriteEngine on
  2. RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tudominio.com [NC]
  3. RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 23/09/2012, 07:34
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

Cita:
Iniciado por emprear Ver Mensaje
Coincido con @skamasle, tenés que definir bien que querés hacer. No sea cosa que termines bloqueandote a ti mismo

en mi ejemplo solo asignamos un valor a local_ref cuendo el referer es el definido, luego hacemos un allow solo para esa variable de entorno.

No es exactamente lo mismo que una protección para hotlink.
Si querés algo para eso,
Código Apache:
Ver original
  1. RewriteEngine on
  2. RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?tudominio.com [NC]
  3. RewriteRule \.(jpg|jpeg|png|gif)$ - [NC,F,L]

Saludos


Gracias ;).
Por cierto, una duda:

Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^https://www.miweb.com/visualizar-imagen.php" imagen=1
  2. <filesMatch "\.(jpg|gif|png)$">
  3. Order Allow,Deny
  4. Allow from env=imagen
  5. </filesMatch>

¿Está bien usado así?
Se usa así:
https://www.miweb.com/visualizar-imagen.php?imagen=principal.png
No entiendo muy bien qué hace ese 1... y si todo el código está bien adaptado o tiene algún fallo dímelo por favor :).
Y ese código dice que solo puedo poner en la variable imagen nomres terminados con .jpg|gif|png, ¿verdad?

Gracias de antemano.
  #11 (permalink)  
Antiguo 23/09/2012, 11:54
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Impedir que se vea cierto contenido

Son cosas diferentes.

nada tiene que ver el pasar imagen como parámetro x GET de un php con lo otro.

Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^http://emprear.com/index.html" local_ref=1
  2. <filesMatch "\.(jpg|gif|png)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </filesMatch>


una traduccón en palabras de eso sería
En caso de que el refrerer sea cierta url, establecer una variable de entorno llamada local_ref con valor de 1 (el nombre de dicha variable, puede ser otro, imagen, por ejemplo, y el valor, también)

luego, para los archivos de extensiones gif,jpg,png, solo permitir el acceso (allow from), para cuando exista local_ref, que obviamente se crea solo si las imagenes son invocadas desde el referer correspondiente.

Imagina que alguien copia y pega en la barra de direcciones
http://emprear.com/logo.jpg, esto provocaria un acceso prohibido(error 403), ya que al no existir referer válido, local_ref no se crea

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 23/09/2012, 16:19
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

Pero ese código permite ÚNICAMENTE el acceso a los archivos .(jpg|gif|png) desde esa página (http://emprear.com/index.html), o también podría ingresar a archivos .(jpg|gif|png) desde por ejemplo (http://emprear.com/listas.html)?


Por otra parte —y por último—, quiero que solo se puedan acceder a las páginas .php y solo mediante emprear.com/* (todos los archivos) (si mi web se llamara así), y SOLO a los archivos .(jpg|gif|png) mediante emprear.com/visualizar-imagen.php?imagen=nombre_imagen

¿Todo esto con htaccess cómo sería?

Muchísimas gracias.
  #13 (permalink)  
Antiguo 23/09/2012, 16:58
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Impedir que se vea cierto contenido

@kies89

Estás mezclando un poco las cosas, .htaccess hace lo que te indiqué, en cuanto a
visualizar-imagen.php?imagen=nombre_imagen, no se sabe a ciencia cierta que es lo que hace esa script.

Imagino que es algo como esto

http://foros.emprear.com/proteger_pdf/

usa loguin.php y sin_sesion.php
En el zip está el código necesario

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #14 (permalink)  
Antiguo 24/09/2012, 12:09
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

Efectivamente emprear, hace eso el archivo PHP.


Aquí mi código del htaccess:
[Lo que hace es que no se puede ver en la web (y solo si proviene de localhost se puede hacer) ningún ningún archivo gif|jpg|jpeg|png|bmp, con lo que me queda que todos los demás archivos (.php principalmente) son los únicos que pueden ejecutarse/mostrarse. Además, los archivos gif|jpg|jpeg|png|bmp solo los puedo mostrar desde http://localhost/visualizar-imagen.php?imagen=

Está todo correcto??]


Código Apache:
Ver original
  1. #Solo se pueden ver los archivos .(gif|jpg|jpeg|png|bmp) desde http://localhost/visualizar-imagen.php?imagen=archivo_ejemplo.extensión
  2. SetEnvIfNoCase Referer "^http://localhost/visualizar-imagen.php" local_ref=1
  3. <filesMatch "\.(gif|jpg|jpeg|png|bmp)$">
  4. Order Allow,Deny
  5. Allow from env=local_ref
  6. </filesMatch>
  7.  
  8. <IfModule mod_rewrite.c>
  9. Options +FollowSymLinks
  10. RewriteEngine On
  11. RewriteBase /
  12.  
  13. # Si... otra cosa. [B]¿Esto qué hace?[/B]
  14. RewriteCond %{REQUEST_FILENAME} !-f
  15.  
  16. # Si el archivo no es un directorio
  17. RewriteCond %{REQUEST_FILENAME} !-d
  18.  
  19. # "Redirigir" a paginaNo-existe.html si las extensiones de los archivos a los que se quiere acceder son gif|jpg|jpeg|png|bmp
  20. RewriteRule . /paginaNo-existe.html [L]
  21.  
  22. # Si la consulta tiene extension .php
  23. RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.php\ HTTP
  24.  
  25.  
  26.  
  27. RewriteCond %{HTTP_REFERER} !^http://localhost$ [NC]
  28. RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
  29. RewriteCond %{HTTP_REFERER} !^http://localhost$ [NC]
  30. RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [NC]
  31. RewriteRule .*\.(gif|jpg|jpeg|png|bmp)$ - [F,NC,L]
  32.  
  33.  
  34. </IfModule>

Última edición por kies89; 24/09/2012 a las 12:16
  #15 (permalink)  
Antiguo 24/09/2012, 12:18
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Impedir que se vea cierto contenido

[QUOTE=kies89;4277796]Efectivamente emprear, hace eso.

hace que? lo que yo hago con los pdf?
En ese caso tendrías que adaptar mi script, cambiando el mime por el correcto para cada tipo de imagen. El secreto de la protección es que al usar readfile y ubicar las imágenes por fuera del documentRoot


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #16 (permalink)  
Antiguo 24/09/2012, 14:33
 
Fecha de Ingreso: septiembre-2012
Ubicación: Madrid
Mensajes: 89
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Impedir que se vea cierto contenido

[QUOTE=emprear;4277803]
Cita:
Iniciado por kies89 Ver Mensaje
Efectivamente emprear, hace eso.

hace que? lo que yo hago con los pdf?
En ese caso tendrías que adaptar mi script, cambiando el mime por el correcto para cada tipo de imagen. El secreto de la protección es que al usar readfile y ubicar las imágenes por fuera del documentRoot


Saludos
Sí, a lo del PDF.
Pero te estoy preguntando lo que pongo arriba sobre el htaccess...

¿Por fuera del DocumentRoot? Bueno, pero si lo voy a llamar igualmente con PHP a la imagen (por estar fuera del DocumentRoot), dará igual, no? Vamos, no le veo ninguna ventaja...

Etiquetas: htaccess
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 00:40.