Foros del Web » Programando para Internet » PHP »

Evitar url cuando uso iframe

Estas en el tema de Evitar url cuando uso iframe en el foro de PHP en Foros del Web. Buenas a todos, estoy usando un iframe para mostrar todas mis paginas php, pero me gustaria saber si existe alguna forma de evitar (sin usar ...
  #1 (permalink)  
Antiguo 15/04/2013, 08:27
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Evitar url cuando uso iframe

Buenas a todos,
estoy usando un iframe para mostrar todas mis paginas php, pero me gustaria saber si existe alguna forma de evitar (sin usar javascript), que el usuario intente ingresar a las paginas escribiendo la URL

Aca el codigo:

Código HTML:
Ver original
  1. <!DOCTYPE HTML>
  2.    
  3. </head>
  4.  
  5. <div class="menu" >
  6. <ul class="nav">
  7. <li>
  8. <a href="main/pagina1.php" target="contenido">MI PAGINA<span class="flecha"></span></a>
  9. </li>
  10. <li>
  11. <a href="main/pagina2.php" target="contenido">MI PAGINA 2<span class="flecha"></span></a>
  12. </li>
  13. </ul>
  14. </div>
  15. <div class="cuerpo">
  16. <iframe name="contenido" frameborder="0"  style=" width: 101%; min-height:900px;  text-align: center;"  >
  17. </div>
  18. </body>
  19. </html>

Como se puede ver, todas las paginas php se cargan en el iframe contenido..

entonces por ejemplo en la url solo se ve asi:


http://localhost/proyecto/main/

Pero un usuario podria colocar esto:

http://localhost/proyecto/main/pagina2.php

e ingresaria a la pagina....

Eso es lo que quiero evitar, pensaria yo que bloqueando la barra de navegacion pero no quiero hacerlo de esa forma

Existe alguna forma en php de no permitir esto ?

O que otro modo puedo utilizar similar a los iframe?...que no sea recargar capas con ajax ...

Agradezco me puedan dar alguna indicación, muchas gracias
  #2 (permalink)  
Antiguo 15/04/2013, 08:31
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

Te recomiendo que empieces a ver como funciona el patrón de diseño MVC (Modelo-Vista-Controlador).

Te voy a dar una solución rápida y sencilla.

En tu index.php pones:

Código PHP:
Ver original
  1. define('AUTHORIZE_ACCESS', true);

En el resto de páginas en la primera linea pones:

Código PHP:
Ver original
  1. if (!defined('AUTHORIZE_ACCESS')) exit('Acceso directo no permitido');


Con esto consigues que si el usuario no entra por la página index.php no podrá visualizar la siguiente página, pero como ya te digo para eso debes crear un nuevo index.php desde el cual debes cargar cada una de las páginas a las que quieres prohibir el acceso directo desde url.

index.php

Código PHP:
Ver original
  1. define('AUTHORIZE_ACCESS', true);
  2.  
  3. $page = $_GET['pag'].'.php';
  4.  
  5. if(file_exists($page)){
  6.     include $page;
  7. }else{
  8.     include "index.php";
  9. }

De esta manera los enlaces a tus páginas deben ser con el siguiente formato:

Código HTML:
Ver original
  1. <a href="main/index.php?pag=pagina1" target="contenido">MI PAGINA<span class="flecha"></span></a>


Espero que se entienda la explicación.


Un saludo.

Última edición por pr0; 15/04/2013 a las 08:38
  #3 (permalink)  
Antiguo 15/04/2013, 08:51
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

Ok, te explico como lo tengo yo, porque lo del nuevo index es lo que no se donde colocarlo..
Tengo un primer index en mi carpeta principal
Proyecto/index.php

En este index es donde esta la pagina de logueo que me lleva al archivo login.php

En login.php tengo esto:

Código PHP:
Ver original
  1. <?php
  2. require("conexion.php");
  3. include("class.xss.php");
  4. $db = conectar();
  5. $user=$_POST['user'];
  6. $pass=$_POST['password'];
  7.  
  8. $sql="SELECT * FROM usuarios WHERE COD_USU=? AND PAS_USU=?";
  9. $result = $db->prepare($sql);
  10.  
  11. $result->execute(array($user, sha1($pass)));
  12. $numfilas = $result->rowCount();
  13. if($numfilas==0)
  14. header("Location: index.php?l_error=".RandomString(50,TRUE,TRUE,TRUE)."");
  15.  
  16. else
  17. {
  18.   $_SESSION["login"] = $user;
  19.   header("Expires: Tue, 01 Jul 2001 06:00:00 GMT");
  20.   header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  21.   header("Cache-Control: no-store, no-cache, must-revalidate");
  22.   header("Cache-Control: post-check=0, pre-check=0", false);
  23.   header("Pragma: no-cache");
  24.   header("Location: main");  
  25. }  
  26. ?>

Si el usuario si existe me lleva a la carpeta main, donde tengo otro index
Ese nuevo index tiene lo siguiente:
Código PHP:
Ver original
  1. <?php
  2. require("../seguridad.php");
  3. ?>
  4. <!DOCTYPE HTML>
  5. <head>
  6.     <meta http-equiv="content-type" content="text/html" />
  7.     <meta name="author" content="www.intercambiosvirtuales.org" />
  8.     <title>Sofware - Iniciar sesion</title>
  9.     <link rel="stylesheet" href="../css/estilos.css" type="text/css" media="screen" />
  10.     <link rel="stylesheet" href="../css/estilo_menu.css" type="text/css" media="screen" />
  11. </head>
  12.  
  13. <body>
  14.  
  15. <div class="elemento"></div>
  16.  
  17.  
  18. <div class="menu" >
  19. <?php
  20. include("../menu.php");
  21. $menu=new Menu_Principal();
  22. $menu->menu($user, false);
  23. ?>
  24.  
  25. </div>
  26. <div class="cuerpo">
  27. <iframe name="contenido" frameborder="0"  style=" width: 101%; min-height:900px;  text-align: center;"  >
  28. </div>
  29. </body>
  30. </html>
Y es ahi donde empiezo a cargar a partir del menu, los archivos en el iframe

Entonces viene mi pregunta, eso del nuevo index, podria incluirlo en el index q tengo dentro de mi carpeta main?... o en donde deberia colocarlo ?
  #4 (permalink)  
Antiguo 15/04/2013, 08:55
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

Pues el nuevo index lo metes en main y tu actual index lo llamas por ejemplo INICIO de manera que quedaría asi:


Código PHP:
Ver original
  1. define('AUTHORIZE_ACCESS', true);
  2. $page = $_GET['pag'].'.php';
  3.  
  4. if(file_exists($page)){
  5.     include $page;
  6. }else{
  7.     include "index.php?pag=inicio";
  8. }
  #5 (permalink)  
Antiguo 15/04/2013, 08:58
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

y ese index lo incluyo en cada archivo y listo ???
  #6 (permalink)  
Antiguo 15/04/2013, 09:13
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

¿Como?

creo que no has entendido el funcionamiento. El index.php no tienes que incluirlo en ninguna parte, el usuario hace uso de ese index.php como puerta de entrada al resto de páginas.

http://www.dominio.com/login.php -> una vez logeado -> http://www.dominio.com/main/index.php (el mio)

y desde ese index.php ya vas cargando la página que te soliciten con los links index.php?pag=la_pagina_que_sea
  #7 (permalink)  
Antiguo 15/04/2013, 10:23
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

mmm sii, etaba confundido pero listo ya me funciono bien !..Muchas gracias
  #8 (permalink)  
Antiguo 15/04/2013, 14:49
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

Que pena la molestia pero tengo un ultimo problema.
Resulta que estoy usando una funcion javascript para pasar parametros por GET con jquery a traves de .load

Aca la funcion:

Código Javascript:
Ver original
  1. function jquery_pasa_camp(archivo, div, ncamp, nvar, vvar, css_div){
  2.     var vncamp="";
  3.     var cadena="";
  4.     var amper="";
  5.  
  6.     if(ncamp!="")
  7.     ncamp = ncamp.split("@");
  8.    
  9.     if(nvar!="")
  10.     nvar = nvar.split("@");
  11.     if(vvar!="")
  12.     vvar = vvar.split("@");
  13.     if(ncamp!="")
  14.     for (var i=0;i<ncamp.length;i++){
  15.         if($('#'+ncamp[i]).length){//COMPRUEBO SI EXISTE EL ELEMENTO
  16.             if($('#'+ncamp[i]).get(0).type=="radio" || $('#'+ncamp[i]).get(0).type=="checkbox"){//VALIDO SI EL CAMPO ES TIPO RADIO O CHECKBOX
  17.                 vncamp = booltoint(document.getElementById(ncamp[i]).checked);
  18.             }else{
  19.                
  20.                 vncamp = document.getElementById(ncamp[i]).value;
  21.                
  22.             }  
  23.             if(i==0)
  24.                 amper="";
  25.             else
  26.                 amper="&";
  27.               cadena = cadena+amper+ncamp[i]+"="+encodeURIComponent(vncamp);
  28.         }
  29.     }
  30.     if(nvar!="")
  31.     for (var i=0;i<nvar.length;i++){
  32.         if(ncamp.length==0  && i==0)
  33.             amper="";
  34.         else
  35.             amper="&";
  36.         cadena = cadena+amper+nvar[i]+"="+encodeURIComponent(vvar[i]);
  37.     }
  38.     if(css_div==1)
  39.     {
  40.       $("#"+div).css({
  41.    "background-color": "white",
  42.    "border": "white",
  43.    "color": "white"
  44.  
  45. })
  46.  
  47.   }
  48.    $("#"+div).hide();
  49.     $("#"+div).fadeIn(2000).load(archivo+".php?"+cadena);
  50. }

Y la uso asi:

archivo usuarios.php


Código PHP:
Ver original
  1. <?php
  2. if (!defined('AUTHORIZE_ACCESS'))
  3. {
  4.     include "page-no-found.php";
  5.     exit('Acceso directo no permitido');
  6. }
  7. require("../seguridad.php");
  8. require("../conexion.php");
  9. if( ( isset($_POST['op'])) or (isset($_GET['op'])) )
  10. {  
  11.   if($op]==1)
  12.  {
  13.     echo "aca llega";
  14.  }
  15.  
  16. }
  17. else
  18. {
  19. ?>
  20. <input type="text" id="cod_usu_reg" size="42" onblur="jquery_pasa_camp('usuarios', 'validate_user', 'cod_usu_reg', 'op', '1', '0')"   />
  21. <label id="validate_user"  class="jquery_validate"></label>
  22. <?php
  23. }

Como se puede ver, en el onblur llamo la funcion y voy a op=1, por GET, pero cuando llego alla me muestra "Acceso directo no permitido", y lo mismo me pasa si uso ajax (post)

Como podria solucionar esto ??..
Agradezco me puedas ayudar !!
  #9 (permalink)  
Antiguo 15/04/2013, 17:29
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

Hola oscarbt,

pues es muy sencillo. Cuando haces un LOAD o usas AJAX, estas haciendo una petición de una página pero en realidad no estás navegando en ella por lo tanto la constante AUTHORIZE_ACCESS no está definida y como resultado te deniega el acceso.

Tienes que tener clara una cosa, tu entras al sistema a través de INDEX.PHP donde defines la variable AUTHORIZE_ACCESS y por eso puedes seguir navegando por el resto de páginas que "cuelgan" de index.php, pero si intentas acceder a una página protegida de forma directa (ya sea ajax o load) como no tienes definida la variable AUTHORIZE_ACCESS pues te prohibe el paso.

Espero que lo hayas entendido. Solución? pues las páginas que sean para llamadas AJAX o LOAD metelas en un directorio que se llame AJAX y dentro colocas un fichero .htaccess y dentro metes la linea Deny from all.

Un saludo.
  #10 (permalink)  
Antiguo 16/04/2013, 08:14
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

Hola pr0, bueno la verdad hice lo que tu me dijiste pero aun persiste el problema
Te cuento como tengo todo, no se si sea por la estructura q manejo o q
Tengo la carpetra principal que se llama proyecto, dentro de proyecto tengo el primer index donde se loguea el usuario, ademas una carpeta que se llama main y dentro de main una que se llama interfaces (en interfaces tengo el archivo .htaccess, cuyo nombre es .htaccess, ese archivo solo tiene la siguiente linea: Deny from all)
Cuando el usuario se loguea y existe es redireccionado a la carpeta main
Código PHP:
Ver original
  1. header("Location: main/inicio.php");

alli va al archivo inicio.php, donde cargo el menu y donde tengo el iframe:

Código PHP:
Ver original
  1. <?php
  2. //if (!defined('AUTHORIZE_ACCESS')) exit('Acceso directo no permitido');
  3. define('AUTHORIZE_ACCESS', true);
  4. require("../seguridad.php");
  5. ?>
  6. <div class="menu" >
  7. <?php
  8. include("../menu.php");
  9. $menu=new Menu_Principal();
  10. $menu->menu($user, false);
  11. ?>
  12.  
  13. </div>
  14. <div class="cuerpo">
  15. <iframe name="contenido" frameborder="0"  style=" width: 101%; min-height:900px;  text-align: center;"  >
  16. </div>
  17. </body>
  18. </html>

El menu tiene estructura como la siguiente:

Código PHP:
Ver original
  1. <?php
  2.  ?>
  3. <ul class="nav">
  4. <li>
  5. <a href="index.php?pag=interfaces/usuarios"><span class="flecha">►</span>
  6. </a>
  7. </li>        
  8. </ul>
  9. <?php
  10. ?>

Entonces en el index.php que esta dentro de main tengo lo siguiente:

Código PHP:
Ver original
  1. <?php
  2. define('AUTHORIZE_ACCESS', true);
  3. $page = $_GET['pag'].".php";
  4. if(file_exists($page))
  5.     include $page;
  6. else
  7.     include "page-no-found.php";
  8. ?>
y dentro de la carpeta interfaces tengo el archivo usuarios.php, que es el que no me deja pasar parametros por POST ni GET

ese archivo tiene lo siguiente:

Código PHP:
Ver original
  1. <?php
  2. if (!defined('AUTHORIZE_ACCESS'))
  3.  exit('Acceso directo no permitido');
  4. require("../seguridad.php");
  5. include("../class.sigca.php");
  6. require("../conexion.php");
  7.  
  8. if( ( isset($_POST['op'])) or (isset($_GET['op'])) )
  9. {
  10.    if($op==1)
  11.     {
  12.         echo "llega a la pcion 1";
  13.      }
  14.  
  15. }
  16. else
  17. {
  18. ?>
  19. <div class="columna_izquierda">Codigo de usuario</div>
  20. <div class="columna_derecha">
  21. <input type="text" id="cod_usu_reg" size="42" onblur="jquery_pasa_camp('usuarios', 'validate_user', 'cod_usu_reg', 'op', '1', '0')"  />
  22. <label id="validate_user"  class="jquery_validate"></label>
  23. <?php
  24.  
  25. }
  26.  
  27. ?>
En ese onblur es donde me dice Acceso directo no permitido....

Espero me puedas ayudar...Muchas gracias
  #11 (permalink)  
Antiguo 18/04/2013, 01:52
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

Hola,

vamos a ver, sin ver el codigo de ese onblur no puedo decirte pero estoy practicamente seguro de que te está pasando lo de siempre.

A ver si me explico de una vez por todas:

NO puedes ir a una página sin pasar previamente por el index.php que DEFINE la constante AUTHORIZED_ACCESS. Esto es de LOGICA puesto que si no pasas por esa pagina pues la constante no existe y al llegar a una página que te la pida pues te va a denegar el acceso.

TODOS TUS ENLACES tienen que ser del estilo index.php?pag=la_pagina_que_sea, si intentas hacer un enlace tipo www.dominio.com/main/interfaces/usuarios.php te va a denegar el acceso por no haber pasado por la puerta de entrada que es index.php!

Se ha entendido ahora?

P.D: ¿por qué sigues utilizando un iframe si ya no te hace falta?
  #12 (permalink)  
Antiguo 18/04/2013, 07:29
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

El onblur va a la funcion jquery_pasa_camp_var

Mas arriba esta el codigo de esa funcion, al ejecutarse esta funcion se va al misma archivo (usuarios.php), a la opcion 1, y llega por GET, lo del iframe lo tengo para que la URL siempre sea la misma, es por eso que uso el iframe.....
Y claro te entiendo bien lo que me dices....y estoy haciendo exactamene lo que tu me explicas pero nada.....
  #13 (permalink)  
Antiguo 18/04/2013, 07:48
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años
Puntos: 28
Respuesta: Evitar url cuando uso iframe

Si te dice acceso denegado es porque no lo estás haciendo correctamente, es imposible si entras siempre por index.php

La unica manera de saberlo es quitando el iframe para ver en que URL estas navegando realmente pero estoy practicamente seguro de que no lo estas haciendo a través de index.php sino que estás navegando en usuarios.php directamente.

Prueba a quitar el if (!defined('AUTHORIZE_ACCESS')) exit('Acceso directo no permitido'); de la página usuarios.php y pon esta linea para que muestre que url estas utilizando

Código PHP:
Ver original
  1. echo $_SERVER["REQUEST_URI"];


Tal vez al ser una llamada AJAX el define no tiene efecto puesto que no estas cargando de forma directa la pagina usuarios.php y por tanto el define no sirve. Prueba a:

- Las paginas que cargues a través de AJAX no les pongas la comprobación y simplemente metelas en una carpeta ajax dentro del directorio protegido con el HTACCESS.
- Puesto que ya estan protegidas por el HTACCESS ya no es necesario protegerlas mediante codigo PHP.
  #14 (permalink)  
Antiguo 18/04/2013, 08:08
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: Evitar url cuando uso iframe

Listo con esa indicacion por fiinnn solucione el problema.......Muchas pero muchas gracias !!!

Etiquetas: html, iframe, url
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 1 personas




La zona horaria es GMT -6. Ahora son las 18:45.