Ver Mensaje Individual
  #11 (permalink)  
Antiguo 14/06/2011, 13:05
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Diferentes instancias de una página web.

elnaza_14:

Primero creo que es necesaria alguna precisión,

Cita:
La cuestión surge por el hecho de que me gustaría poder controlar de manera más fiable el hecho de que no sea posible entrar a cualquier archivo del sitio con solo escribir la URL directamente...

Que alcance tiene eso, y para que?,

supongamos que tu pagina tiene un home llamado
inicio.php
y una página secundaria, llamada
contenido.php


vos desearias que quien tipee en su barra de direcciones

http://tusitio.com/contenido.php

no pueda acceder a ella?
podés, con php, con la variable
$_SERVER['HTTP_REFERER'], analizando la cadena y comparandola con el nombre de tu dominio, esto es asi porque al tipear un dirección directamente, esta variable NO existe.

Podés complementar con una verificación de las cookies habiliitadas

código de inicio.php

Código PHP:
Ver original
  1. <?php
  2. setcookie("verificar",'ok',time()+10800); //tres horas x sesion
  3. echo "<h1>inicio</h1>";
  4. echo "<a href='contenido.php'>contenido</a>";
  5. ?>


código de contenido.php

Código PHP:
Ver original
  1. <?php
  2. if(!isset($_COOKIE['verificar'])){
  3. echo "<p>asegurese que las cookies estan habilitadas en su navegador.<br>
  4. <a href='inicio.php'>ir al inicio</a></p>";
  5. exit();
  6. }
  7. $dominio = "foros.emprear.com"; //
  8. $dominio2 = "www.foros.emprear.com"; //
  9.  
  10. $referer = $_SERVER['HTTP_REFERER'];
  11. if ($referer == "") {
  12. $host = $dominio;
  13. } else {
  14. $host = parse_url($referer);
  15. }
  16.  
  17. if($host['host'] == $dominio || $host['host'] == $dominio2) {
  18. echo "muestro";
  19. } else {
  20. //redirijo
  21. header("Location: inicio.php");
  22. exit();
  23. }
  24. ?>
Pero cuidado, esa script es tan estricta que no podrian acceder a contenido.php desde links externos a tu dominio, para hacerla más permisiva, solo deberias condicionar contra la existencia de $referer y no contra su contenido


Demo

http://foros.emprear.com/php/cookies/inicio.php

http://foros.emprear.com/php/cookies/contenido.php
(tambien intentar acceder a esa segunta dirección ingresandola directamente en el navegador, o sencillamente pegando y accediendo)

Probar tambien deshabilitando cookies en el navegador

Acceder desde un sitio fuera del dominio

http://emprear.com.ar/foros.php

En cuanto al comportamiento de los diferentes navegadores, funciona correctamente en todos

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.