Foros del Web » Programando para Internet » PHP »

Visualizar archivos (PDF, doc...) pero con autentificación

Estas en el tema de Visualizar archivos (PDF, doc...) pero con autentificación en el foro de PHP en Foros del Web. Hola!! He creado una web que se utiliza para gestionar unos historiales, y me vendría muy bien poder poner archivos adjuntos (PDF, doc, xls...). He ...
  #1 (permalink)  
Antiguo 27/01/2012, 21:06
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Visualizar archivos (PDF, doc...) pero con autentificación

Hola!!

He creado una web que se utiliza para gestionar unos historiales, y me vendría muy bien poder poner archivos adjuntos (PDF, doc, xls...).

He estado mirando cómo podría hacerse más cómodamente, pero ninguna solución me es del todo grata:

1 - Con google docs viewer: te permite ver archivos de tu servidor (de cualquier servidor en realidad) utilizando google docs. Sólo hay que darle la URL, muy sencillito. PROBLEMA: para entrar a esta web hay que estar registrado, es para uso de sólo unos pocos. Por lo tanto, si lo hago de este modo, cualquiera que conozca la URL de esos archivos puede verlos/descargarlos.

2 - Protegiendo con contraseña mediante htacces. PROBLEMA: la autentificación de usuario es por PHP. Además no todo el mundo tiene que poder ver todos los documentos, cosa que he conseguido solventar con PHP, pero no veo el modo de hacerlo desde htacces.

3 - Sirviendo los documentos como sólo descarga a través de un script PHP. Así sí podría asegurarme de que primero pasa la autentificación. PROBLEMA: sería más cómodo si se pudiera visualizar en el navegador.

A una mala supongo que elegiría este último, ya que es el único que solventa el problema de la seguridad, pero quería saber si hay alguna forma de tenerlo todo (soy de los exigentes xD)

Un saludo.
  #2 (permalink)  
Antiguo 28/01/2012, 09:29
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: Visualizar archivos (PDF, doc...) pero con autentificación

Podés hacer algo asi

el usuario entra a loguin.php
segun el usuario le aparecen los links a sus respectivos archivos
ponés tus pdf en una carpeta aparte (pdf, por ejemplo), y en esa carpeta, un .htaccess con
Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^http://tudominio.com/loguin.php" local_ref=1
  2. <FilesMatch "\.(pdf)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </FilesMatch>

de esa manera cualquier acceso a
http://tudominio.com/pdf/*.pdf en forma directa desde la barra de direcciones ó cualquier otra página que no sea loguin.php, va a mostrar un error 403

Podés agregar extensiones para otro tipo de documentos
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 28/01/2012, 11:41
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Hola!

Gracias por tu respuesta!

Parece que lo que me dices es de lo más adecuado....si no he entendido mal, con el .htacces lo que harías seria permitir el acceso a esos archivos sólo si el script que los solicita es uno en concreto (el login.php que dices) ¿me equivoco?.

Si no es abusar demasiado, ¿podrías explicarme brevemente qué es lo que hace cada cosa en ese código que me has dado? Así aprendo a hacerlo por mi mismo para el futuro.

Mil gracias.
  #4 (permalink)  
Antiguo 28/01/2012, 13:05
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: Visualizar archivos (PDF, doc...) pero con autentificación

Cita:
Iniciado por naggety Ver Mensaje
Hola!

Gracias por tu respuesta!

Parece que lo que me dices es de lo más adecuado....si no he entendido mal, con el .htacces lo que harías seria permitir el acceso a esos archivos sólo si el script que los solicita es uno en concreto (el login.php que dices) ¿me equivoco?.

Si no es abusar demasiado, ¿podrías explicarme brevemente qué es lo que hace cada cosa en ese código que me has dado? Así aprendo a hacerlo por mi mismo para el futuro.

Mil gracias.
La primera directiva
SetEnvIfNoCase Referer "^http://tudominio.com/loguin.php" local_ref=1
establece una variable de entorno, a la que llamamos local_ref y le damos un valor = a 1(el valor en este caso es lo de menos), lo cual hace en función del atributo de una solicitud hecha, en este caso que el referer sea loguin.php

Posteriormente con
<FilesMatch "\.(pdf)$">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
estamos diciendo que para todos los archivos .pdf el acceso solo está autorizado siempre que este definida la variable local_ref )lo cual obviamente se hace si la página de referencia es loguin.php)
Un poco redundante la explicación ya que medio que se explica por si misma.

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 28/01/2012, 13:56
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Muchísimas gracias otra vez!

En cuanto tenga un momento pruebo a implantarlo.
  #6 (permalink)  
Antiguo 30/01/2012, 17:02
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Hola otra vez!!

He probado a hacer lo que me dijiste y CASI funciona!

No sé por qué, no puedo visualizar los documentos, sólo descargarlos. Si borro el archivo .htaccess, se ven sin problema, qué cosa más rara.

¿Se te ocurre alguna solución?

Un saludo.
  #7 (permalink)  
Antiguo 30/01/2012, 23:41
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: Visualizar archivos (PDF, doc...) pero con autentificación

@naggety
Estuve probando, y si bien el método funciona, veo que se pone un poco inestable con los pdf.
Pero encontré otro método, creo que más funcional.
Lo primero que dejo en claro, es que el usuario tiene que tenr instalado el plugin de AdobeReader, si no siempre va a querer decargar el archivo
Como dijiste que tenés un sistema de loguin, voy a usar sesiones para el ejemplo

Por un lado tenes la página del loguin, que contra la validación de usuario y contraseña va a hacer algo asi
login.php (yo doy por hecho que se logueo y se creo la sesion pdf = logueado)

Código PHP:
Ver original
  1. <?php
  2. $_SESSION['pdf'] = "logueado";
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <title>titulo</title>
  8. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  9. </head>
  10. <body>
  11.     <p>En un link<br />
  12. <a href="pdf/pdf.php?archivo=Sqlite">ver pdf</a>
  13. </p>
  14.  
  15.  
  16.     <p>Cargando en un iframe<br />
  17. <a href="pdf/pdf.php?archivo=Sqlite" target="visor">ver pdf</a>
  18. </p>
  19.  
  20. <iframe name="visor" width="600" height="400" src="about:blank"></iframe>
  21. </body>
  22. </html>

Los links apuntan a un archivo pdf.php que lleva por parametro archivo=xxx, xxx es el nombre del archivo sin la extension (en el ejemplo, Sqlite)

pdf.php

Código PHP:
Ver original
  1. <?php
  2. if(isset($_GET['archivo'])){
  3. $archivo = $_GET['archivo'];
  4. }else{
  5. $archivo = "noexiste";
  6. }
  7.  
  8.  
  9. if(isset($_SESSION['pdf'])){
  10.    
  11. if($_SESSION['pdf'] == "logueado"){
  12. $fichero = "/$archivo.pdf"; // aqui la ruta a la carpeta con todos tus pdf
  13. if (file_exists($fichero)) {
  14.     header('Content-Type: application/pdf');
  15.     header('Expires: 0');
  16.     header('Cache-Control: must-revalidate');
  17.     header('Pragma: public');
  18.     ob_clean();
  19.     flush();
  20.     readfile($fichero);
  21.     exit;
  22. }else{
  23. echo "Archivo inexistente";
  24. }
  25.  
  26. }else{
  27. echo "No permitido";
  28. }
  29.  
  30. }else{
  31. echo "No autorizado";
  32. }
  33. ?>

Le puse algunas condiciones extras para que veas como trabaja.
Usa readfile() que lee un archivo desde una ruta en el disco, vale decir que si querés más seguridad podrias poner tus pdf por fuera del documentRoot (es decir una carpeta no accesible desde el navegador)

Para el ejemplo tambien cree un archivo sinsesion.php, este en realidad crea una sesion, pero con otro valor, para forzar el error.
Vale decir que tus usuarios nunca abren el pdf directamente, sino un php que lee el pdf y lo muestra, sólo si hay sesion con un valor que vos determinas (sesion que tendrás que crear tras validar usuario y contraseña)

Podes reforzar más aún la restricción, evitando que los pdf se guarden en la cache del navegador, para eso en la carpeta donde esta pdf.php (pdf, en el ejemplo) hay un .htaccess con
Código Apache:
Ver original
  1. addType "application/pdf" .pdf
  2. <FilesMatch "\.(pdf)$">
  3.     Header unset Cache-Control
  4.     Header unset Expires
  5.     Header unset Last-Modified
  6.     FileETag None
  7.     Header unset Pragma
  8. </FilesMatch>

Demo

http://foros.emprear.com/proteger_pdf


Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 31/01/2012, 08:55
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Vaya!! Muchas gracias, te has tomado mucho interés!

¿Entonces, usando readfile() podría verse el PDF sin que se conozca la ruta en que se guarda? ¿O he entendido mal? ¿Y se podría descargar?
  #9 (permalink)  
Antiguo 31/01/2012, 09:40
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: Visualizar archivos (PDF, doc...) pero con autentificación

Si, exactamente, pero cuando hablo de ruta hablo de ruta en el disco, no de la url, que son dos cosas distintas.
Con respecto a guardarlo si se puede, el unico inconveniente es que al guardarlo te aparece siempre el mismo nombre de archivo, en mi ejemplo, se guadaría como pdf.pdf

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 31/01/2012, 10:17
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Cita:
Iniciado por naggety Ver Mensaje
Hola!!

He creado una web que se utiliza para gestionar unos historiales, y me vendría muy bien poder poner archivos adjuntos (PDF, doc, xls...).

He estado mirando cómo podría hacerse más cómodamente, pero ninguna solución me es del todo grata:

1 - Con google docs viewer: te permite ver archivos de tu servidor (de cualquier servidor en realidad) utilizando google docs. Sólo hay que darle la URL, muy sencillito. PROBLEMA: para entrar a esta web hay que estar registrado, es para uso de sólo unos pocos. Por lo tanto, si lo hago de este modo, cualquiera que conozca la URL de esos archivos puede verlos/descargarlos.

2 - Protegiendo con contraseña mediante htacces. PROBLEMA: la autentificación de usuario es por PHP. Además no todo el mundo tiene que poder ver todos los documentos, cosa que he conseguido solventar con PHP, pero no veo el modo de hacerlo desde htacces.

3 - Sirviendo los documentos como sólo descarga a través de un script PHP. Así sí podría asegurarme de que primero pasa la autentificación. PROBLEMA: sería más cómodo si se pudiera visualizar en el navegador.

A una mala supongo que elegiría este último, ya que es el único que solventa el problema de la seguridad, pero quería saber si hay alguna forma de tenerlo todo (soy de los exigentes xD)

Un saludo.
no he leido los demas post pero podria ser de mucha ayuda que uses una base de datos
para cuestiones de autentificacion he incluso una tabla con los archivos con accesos
con htacces te puede ayudar para que la url no se tan accesible

en lugar de http://tudominio/archivo/file.pdf

puedas usar algo

http://tudominio/archivo/file1
http://tudominio/archivo/file2
__________________
gerardo
  #11 (permalink)  
Antiguo 31/01/2012, 10:18
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
De acuerdo Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

ahh olvidaba un buen visor de pdf web prueba este hay version free

http://flexpaper.devaldi.com/

saludos
__________________
gerardo
  #12 (permalink)  
Antiguo 28/02/2012, 07:57
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Hola!! Perdonad a los dos!! Me entraron nuevas ocupaciones y dejé el tema de lado!

Emprear, por fin lo he podido probar, ¡y es justo lo que necesitaba! He tenido que añadir un:
header("Content-Disposition: attachment; filename=[nombre completo del archivo]");
Si no, descargaba con el nombre del script php.

Chalchis, gracias, así es precisamente como lo hago, con una base de datos. El problema era que hay que hacerlo desde un script php, y no sabía cómo, hasta ahora.

Gracias a los dos, y un saludo!
  #13 (permalink)  
Antiguo 28/02/2012, 13:38
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: Visualizar archivos (PDF, doc...) pero con autentificación

Si le agregás
header("Content-Disposition: attachment; filename=[nombre completo del archivo]");
creo que va a forzar siempre la descarga y no vas a poder cargar el pdf (en la ventana o un iframe, según fueros mis ejemplos.
Debería hacer algo como esto
que para descargar tu link sea


<a href="pdf/pdf.php?archivo=Sqlite&amp;descargar=1">descargar pdf</a>

y en la script hacer esta modificación (en rojo lo que se agrega)

<?php
session_start();
if(isset($_GET['archivo'])){
$archivo = $_GET['archivo'];
}else{
$archivo = "noexiste";
}


if(isset($_SESSION['pdf'])){

if($_SESSION['pdf'] == "logueado"){
$fichero = "/$archivo.pdf"; // ruta
if (file_exists($fichero)) {
header('Content-Type: application/pdf');
if(isset($_GET['descargar'])){
if($_GET['descargar'] == 1){
header("Content-Disposition:attachment ; filename=[$archivo.pdf");
}
}

header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();

readfile($fichero);

exit;
}else{
echo "Archivo inexistente";
}

}else{
echo "No permitido";
}

}else{
echo "No autorizado";
}
?>

De todas formas si visualizan el archivo y utilizan el icono de descarga del plugin, creo que el nombre seguirá siendo php.pdf, no creo que eso tenga solución
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #14 (permalink)  
Antiguo 05/04/2012, 22:07
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Pregunta Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Woah... eh, casi, casi no tengo ni la menor idea de lo que veo. Estuve viendo tus ejemplos y si es casi lo que necesito, excepto que yo trabajo con Drupal. Intentaré seguir lentamente todo lo que hay aquí, a ver que me sale. Veo que no es tan sencillo como imaginaba. Pensé que era meterme mas a fondo en htaccess, cualquier cosa estaré posteando por aquí.
Gracias una vez mas, emprear. Te paso la voz cualquier cosa. Saludos
  #15 (permalink)  
Antiguo 09/04/2012, 22:47
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Una pregunta: Estan colocando sus archivos, fuera del servidor web, en una carpeta aparte; o los estan simplemente ocultando por medio de php?? Lo que pasa es que Drupal tiene un sistema privado de archivos en donde te piden que pongas tus archivos en una carpeta fuera del html_public. Estoy por probarlo y no se como funciona eso, ya que trate de hacer aquello manualmente y me aparece un error 500, por tanto no creo que sea cosa sencilla.

No se si de tu ejemplo podrías decir cual es la ruta de tu pdf, pero obviamente solo si esta en el servidor web. Que pasa si esa ruta que me das la tipeo manualmente en la barra de url? accedo?

Espero puedan responder a la pregunta y no dejen de lado este thread sino continuo en el mio (no sé como es xD)

PD: La verdad no capto del todo el código, en realidad la parte crucial: $fichero = "/$archivo.pdf" (creo que aqui jalan solo el nombre del archivo que entra como argumento y lo transforman en ruta haciendo que termine en .pdf?)

PD2: Es que recién me inició en PHP xD
  #16 (permalink)  
Antiguo 12/04/2012, 06:10
 
Fecha de Ingreso: agosto-2011
Mensajes: 58
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Hola DavenStrife.

Yo diría que lo que tienes que hacer es lo siguiente:

Imaginemos que tienes dos carpetas: "docs" y "html", donde "html" es la carpeta pública y "docs" donde dejas los ficheros que hay que visualizar (pero solo si estás logueado).

Deberías dejarlo así: $fichero = "/../docs/$archivo.pdf";

Es decir, que la variable fichero incluye la ruta de la carpeta (/../docs), el nombre del archivo ($archivo), y la extensión (.pdf).

Como la carpeta "docs" está fuera del dominio público, no se puede acceder a ella escribiendo en la URL, pero sí desde un script php, como en este caso.

Por favor emprear, corrígeme si me equivoco.
  #17 (permalink)  
Antiguo 12/04/2012, 21:01
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

ok, no lo había entendido, pero ya lo capté. Los ficheros php pueden traspasar la base de la carpeta de publicación como lo es el www o el htdocs. Si leo un fichero que esta en una carpeta fuera del htdocs, por medio de un archivo *.html directo, el fichero no se leera. Sin embargo si preparo la ruta con readfile y sobreescribo el header del archivo (o digan cual es la expresion correcta) por medio de php, el archivo se cargará correctamente sin importar si este dentro o fuera de la carpeta de publicacion de htdocs. Ademas de eso en mi carpeta privada copie exactamente el htaccess y me funcionó.

Ahora lo que necesito nada mas es que las paginas que van a incrustar los pdfs se carguen con una sesion por defecto. Luego al cargarme la ruta, el archivo debe leer si hay sesion o no (por cargarse dentro de la misma pagina si hay), en ese caso el fichero se incrustara sin problema, pero luego de eso me tiene que destruir la sesion.

Si mi teoria es cierta, luego de que los archivos ya se visualicen incrustados, si destruyo la sesion, cada vez que alguien tipee la ruta a la cual va el iframe (el archivo php con parametro), no encontrará nada, ya que la sesion quedará destruida luego de haber incrustado el archivo...

En un rato aviso si me funciono o no...

Gracias naggety por tu post, y gracias por todo el material que has compartido emprear! saludos =)
  #18 (permalink)  
Antiguo 12/04/2012, 21:28
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: Visualizar archivos (PDF, doc...) pero con autentificación

Si, exactamente esa es la idea, leer con php desde la ruta en el sistema de archivos y no necesariamente una ruta que este por debajo de public_html ó htdocs.
Una vez abierto el archivo, es cuestión de manipular el contenido aplpicando los headers apropiados. lacomprobación de la ruta es solo una medida extra. Y en cuanto a la sesion, esta solo implica que se ha hecho el loguin, no está directamente relacionado al la apertura del archivo con readfile()

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #19 (permalink)  
Antiguo 12/04/2012, 21:58
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Eh... me funcionó a medias! XD ...
1) El archivo se carga perfectamente cuando entro a la url de la pagina donde quiero incrustarlo. Bien!
2) Si me pongo a ver por donde viene el pdf encuentro mi ruta de php. Si la tipeo en el navegador no puedo entrar porque despues que termina de leer el archivo cambio el valor de la sesión. Hasta ahi perfecto.
3)Si me voy por inspeccionar elemento de chrome puedo encontrar mi ruta ahi puesta, y me la abre si le doy clic en abrir en nueva pestaña, pero me la bloquea, y eso me agrada.
4)Si... me meto al codigo fuente del archivo (cosa imbloqueable... creo) Google Chrome te genera links directos de tus urls... entro a mi ruta del fichero de php que jala los pdfs....y chan! me lo pone en bandeja XD

Seguiré intentando hacer mas cosas D:
  #20 (permalink)  
Antiguo 12/04/2012, 22:10
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: Visualizar archivos (PDF, doc...) pero con autentificación

@DavenStrife
A esta altura ya me estás comenzando a confundir.... que es exactamente lo que estás buscando?
al parecer hasta el punto 3 todo bien, e en el 4 en dónde decis que falla.
Que los links van a verse, obviamente, el tema es que puedas o nó ver o descargar el archivo sin haber hecho el loguin correspondiente,

intenta ir a
http://foros.emprear.com/proteger_pd...te&descargar=1
ó a
http://foros.emprear.com/proteger_pd...archivo=Sqlite

Poniéndolos directamente en la barra del navegador (sin haber hecho el correspondiente loguin, ya sea con chrome o cualquier otro navegador

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #21 (permalink)  
Antiguo 12/04/2012, 22:35
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Ahorita busco que todos vean, que nadie descargue. Obviamente que cuando incrustas con iframe simple ya te puedes guardar el archivo. Pero eso ya depende de como lo incrustes, eso es aparte. Ojo, la persona que ustedes autentifican si puede ver y puede descargar. Cuando me refiero a que en mi caso puede descargar quiero decir que en la 4ta mencion que hice puedo entrar a ver el archivo pdf no incrustado, sino completo en la pantalla, y por esa razón digo que puedo simplemente descargarlo. En sus ejemplos, eso esta bien, pero en el mio, no lo quiero asi, quiero que se vea, pero no descargue.

En tus links no voy a poder entrar porque no se ha iniciado la sesión, y comprendo perfectamente que aquella se inicia desde loguin.php en tu caso. En el mio se inicia en:

embedprivado.php
Código:
<?php
	session_start();
	$_SESSION['pdf'] = "on";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Prueba de Incrustacion</title> 
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head>
<body>
    <iframe src="rutapdf.php" width="600" height="400"></iframe>
 </body>
</html>
y este es mi fichero php que me lee los pdfs:

rutapdf.php:
Código:
<?php
    session_start();

    if(isset($_SESSION['pdf'])){
        if($_SESSION['pdf'] == "on"){
            $fichero = "../private/mipdf.pdf"; // aqui para la prueba solo estoy haciendolo con un archivo, luego le pedire parametro para cada archivo
            if (file_exists($fichero)) {
                $_SESSION['pdf'] = "off"; //cambio el valor de la sesion para que cuando alguien entre por algun lugar que no sea esta pagina, aparezca mensaje de negacion
                header('Content-Type: application/pdf');
                header('Expires: 0');
                header('Cache-Control: must-revalidate');
                header('Pragma: public');
                ob_clean();
                flush();
                readfile($fichero);
                exit;
            }else{
                echo "Archivo inexistente";
            }
        }else{
            echo "No permitido";
        }
    }else{
        echo "No autorizado";
    }

?>
Uhmm... ya estoy casi cerca, pero algo me falta. Si pongo tu primer codigo de htaccess en mi carpeta de pdfs?
Cita:
SetEnvIfNoCase Referer "^http://tudominio.com/loguin.php" local_ref=1
<FilesMatch "\.(pdf)$">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
Espero me tengan paciencia xD. Saludos y gracias por su apoyo =D

Última edición por DavenStrife; 12/04/2012 a las 22:41 Razón: Aclarar cosas
  #22 (permalink)  
Antiguo 12/04/2012, 22:57
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Nop, es lo mismo. Igual puedo acceder a ver el archivo en pantalla completa solo pinchando "rutapdf.php" en el codigo fuente. Quisiera que me salga no autorizado, lo que pasa es que carga de esa manera porque toma a la pagina del codigo fuente de la misma forma que la que permite visualizar al archivo incrustado. Es decir que a la pagina del codigo fuente no le cambia el valor de la sesion.

¿Hay una forma de tomar mi pagina de incrustaciones y la pagina de su codigo fuente como si fueran distintas?

Aclaro lo que dije arriba: busco que todos vean el pdf en la pagina en donde creo la sesion, pero que nadie lo descargue.. En realidad, es eso, para evitar confusiones xD

Saludos! (:

Última edición por DavenStrife; 12/04/2012 a las 23:06
  #23 (permalink)  
Antiguo 12/04/2012, 23: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: Visualizar archivos (PDF, doc...) pero con autentificación

No termino de entender, cual es la relación de todo con el código fuente, si no se inicia la sesión, no se pueden ver ni bajar

Te he creado un zip con todos mis archivos para que compares
http://foros.emprear.com/proteger_pdf/proteger_pdf.zip
Lo único que tenés que modificar es en pdf.php en donde dice "ruta completa", qque es la ruta en el disco a la carpeta que contiene los pdf reales (que como ya dijimos está por fuera de tu document_root

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #24 (permalink)  
Antiguo 14/04/2012, 00:02
 
Fecha de Ingreso: abril-2012
Mensajes: 14
Antigüedad: 12 años
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Lamento informar que aquí habrá un poco mas de confusión u.u...

Cuando hice este post:
Cita:
Eh... me funcionó a medias! XD ...
1) El archivo se carga perfectamente cuando entro a la url de la pagina donde quiero incrustarlo. Bien!
2) Si me pongo a ver por donde viene el pdf encuentro mi ruta de php. Si la tipeo en el navegador no puedo entrar porque despues que termina de leer el archivo cambio el valor de la sesión. Hasta ahi perfecto.
3)Si me voy por inspeccionar elemento de chrome puedo encontrar mi ruta ahi puesta, y me la abre si le doy clic en abrir en nueva pestaña, pero me la bloquea, y eso me agrada.
4)Si... me meto al codigo fuente del archivo (cosa imbloqueable... creo) Google Chrome te genera links directos de tus urls... entro a mi ruta del fichero de php que jala los pdfs....y chan! me lo pone en bandeja XD
Había puesto este htaccess en la carpeta privada donde coloco los pdfs (en vez de ponerlo en donde esta pdf.php):

Código:
addType "application/pdf" .pdf
<FilesMatch "\.(pdf)$">
    Header unset Cache-Control
    Header unset Expires
    Header unset Last-Modified
    FileETag None
    Header unset Pragma
</FilesMatch>
Entonces quise dejarlo como debería ser, (es decir en la carpeta de pdf.php), pero al hacer eso me sale un error 500 en vez del pdf incrustado

Con el rar que me pasaste me tira el mismo error 500, pero ojo, podrías pensar que estoy enrutando mal. Pero creo que no es asi ya que cuando borro el htaccess puedo ver los pdfs con toda normalidad.

Me doy cuenta que soy malísimo explicando y espero no quedarme desamparado por esa razón XD, de cualquier forma antes de pasar a ver mi inquietud de los hipervinculos del codigo fuente, primero quisiera entender, porque razones puede ser que en mi servidor no se vea y en el tuyo si. ¿En tu carpeta de pdfs estas agregando otro htaccess?

Aparte aclaro que estoy usando una ruta relativa de la forma (../../carpetaprivada/$archivo.pdf) en vez de una absoluta, porque no administro el servidor y no se a que nivel se encuentra la cuota de espacio que me han dado =P (mejor dicho no he buscado xD) pero, tiene que ver tambien eso???, supongo que debe ser lo mismo...

Bueno espero cada vez marear menos ;o;
Saludos (:

Última edición por DavenStrife; 14/04/2012 a las 00:07
  #25 (permalink)  
Antiguo 14/04/2012, 00:37
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: Visualizar archivos (PDF, doc...) pero con autentificación

En cuanto al .htaccess, los probables motivos son

Que tu server y el mio estén configurados en forma distinta, y, por ejemplo el mod_headers que se usa para la directiva headers no este habilitado (lo cual es bastante improbable), en ese caso probá lo siguiente

Código Apache:
Ver original
  1. <IfModule mod_headers.c>
  2. <FilesMatch "\.(pdf)$">
  3.     Header unset Cache-Control
  4.     Header unset Expires
  5.     Header unset Last-Modified
  6.     FileETag None
  7.     Header unset Pragma
  8. </FilesMatch>
  9. </IfModule>
el ifModule funciona como un condicional, y solo ejecuta las directivas si el modulo está cargado, si despues del cambio no se no se produce un error 500, entonces es que no tenes habilitado el módulo, si aún así se produce, hay otras 2 posibilidades bastante comunes
A. que tu .htaccess incluya algo llamado BOM de utf-8, es un caracter invisible que deja el editor de texto, pero que genera un error en .htaccess, hay que tener cuidado porque el block de notas de Windows deja esa marca por defecto si guardas como unicode, asegurate de guardarlo como ANSI
B. que el .htaccess haya sido subido por ftp como binario y no como ascii

Una vez corregido el .htaccess, si ves que no tenes mod_headers, aún te queda la posibilidad de pasar los encabezados para prevenir la cache desde el mismo php, or lo que lscript quedaría

Código PHP:
Ver original
  1. <?php
  2. if(isset($_GET['archivo'])){
  3. $archivo = $_GET['archivo'];
  4. }else{
  5. $archivo = "noexiste";
  6. }
  7.  
  8.  
  9. if(isset($_SESSION['pdf'])){
  10.    
  11. if($_SESSION['pdf'] == "logueado"){
  12. $fichero = "/users/webs/emprear.com/subdomains/$archivo.pdf";
  13. if (file_exists($fichero)) {
  14.     header('Content-Type: application/pdf');
  15. if(isset($_GET['descargar'])){
  16. if($_GET['descargar'] == 1){
  17.     header("Content-Disposition:attachment ; filename=[$archivo.pdf");     
  18. }
  19. }
  20. # headers para prevenir cache
  21. header("Expires: Mon, 26 Jul 1990 05:00:00 GMT");
  22. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  23. header("Cache-Control: no-store, no-cache, must-revalidate");
  24. header("Cache-Control: post-check=0, pre-check=0", false);
  25. header("Pragma: no-cache");
  26.     ob_clean();
  27.     flush();
  28.  
  29.     readfile($fichero);
  30.  
  31.     exit;
  32. }else{
  33. echo "Archivo inexistente";
  34. }
  35.  
  36. }else{
  37. echo "No permitido";
  38. }
  39.  
  40. }else{
  41. echo "No autorizado";
  42. }
  43. ?>

con respecto a la ruta debe ser absoluta, para verificar cual es creas un php y le pones por contenido

<?php
$r = $_SERVER['DOCUMENT_ROOT'];
echo $r;
?>

y te va a resultar en algo como
/users/webs/878743/htdocs/
ó
/www/webs/users/daven/public_html
Como la ultima carpeta es donde se inicia tu web, creas (tomando el segundo ejemplo), dentro de daven una carpeta pdfs, es decir por fuera de public, y usas en el php
/www/webs/users/daven/pdfs/$archivo.pdf

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #26 (permalink)  
Antiguo 23/07/2012, 12:55
Avatar de 1333nvz  
Fecha de Ingreso: julio-2012
Mensajes: 20
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

Antes que nada ¡gracias!.
Necesito crear algo similar a lo que solicita el creador del tema, y creo que me viene de maravillas y se ve relativamente sencillo de implementar.

Cita:
Iniciado por emprear Ver Mensaje
@naggety
Estuve probando, y si bien el método funciona, veo que se pone un poco inestable con los pdf.
Pero encontré otro método, creo que más funcional.
Lo primero que dejo en claro, es que el usuario tiene que tenr instalado el plugin de AdobeReader
¿No es posible hacer uso del sistema a través de un visor de documentos embebidos? Por ejemplo, [URL="Google Docs Viewer "]Google Docs Viewer[/URL]
Así mismo ¿qué visor web de pdfs es una buena opción?

Y por último, acerca de guardar archivos (pdfs) en base de datos, ¿es recomendable? ¿no es también una buena forma de restringir acceso a los archivos?

¡Saludos y gracias!
  #27 (permalink)  
Antiguo 05/02/2016, 00:19
 
Fecha de Ingreso: febrero-2016
Mensajes: 1
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Visualizar archivos (PDF, doc...) pero con autentificación

hola me puedes ayudar con tu codigo por mas que intento visualizar el rchivo pdf me aparece que no existe lo subi a un servidor i ya modifiqueel codigo como tu lo psiste y nada el codigo es este

<?php
session_start();
if(isset($_GET['archivo'])){
$archivo = $_GET['archivo'];
}else{
$archivo = "noexiste";
}


if(isset($_SESSION['pdf'])){

if($_SESSION['pdf'] == "logueado"){
$fichero = "/../pdfdoc/$archivo.pdf"; modifique esta linea
if (file_exists($fichero)) {
header('Content-Type: application/pdf');
if(isset($_GET['descargar'])){
if($_GET['descargar'] == 1){
header("Content-Disposition:attachment ; filename=[$archivo.pdf");
}
}
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();

readfile($fichero);

exit;
}else{
echo "Archivo inexistente";
}

}else{
echo "No permitido";
}

}else{
echo "No autorizado";
}
?>

nose si tenga que poner una url

Etiquetas: doc, pdf, usuarios
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

SíEste tema le ha gustado a 4 personas




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