Foros del Web » Programando para Internet » PHP »

No admitir url

Estas en el tema de No admitir url en el foro de PHP en Foros del Web. Hola: Tengo mi aplicación funcionando correctamente. Esta en PHP4 y MySQL 3. Tengo un index2.php que contiene dos marcos, el top y el main. En ...
  #1 (permalink)  
Antiguo 26/03/2005, 22:58
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
No admitir url

Hola:
Tengo mi aplicación funcionando correctamente. Esta en PHP4 y MySQL 3.
Tengo un index2.php que contiene dos marcos, el top y el main. En el main se cargan diferentes opciones (o menus) dependiendo del tipo de usuario que se identifique. Como utilizo frames, siempre se mantiene fija la url (http://localhost/index2.php).
Cuando interactuo con la aplicacion, lo haga en el frame main, de la forma http://localhost/ver_usuario.php?id=125&forma=a , pero como es un frame esto no se ve reflejado en la url , de modo que un usuario comun y corriente no se daria cuenta de la forma en que se accede a cada modulo de la aplicación. Por el contrario, un usuario medianamente avanzado podria escribir las url directamente con los parametros que necesite mi archivo php.
Mi idea es no permitir que estos usuarios, tal vez mal intencionados, lleguen a los modulos a travez de esa forma, que solo lo hagan a travez de los links que son proporcionados en el menu.
Utilice la funcion HTTP_REFERER pero me han dicho que no es muy segura.
Quisiera saber como solucionar esto, pero no logro conseguir una solución.
Espero se entienda la idea y me puedan ayudar.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #2 (permalink)  
Antiguo 27/03/2005, 04:42
 
Fecha de Ingreso: octubre-2004
Mensajes: 258
Antigüedad: 19 años, 6 meses
Puntos: 1
Hola,

eso lo haces con APACHE, puedes usar la proteccion de hot links que justamente evita que nadie entre escribiendo la direccion, o sea, si yo pongo www.algo.com/pagina.php , el hot link no me dejaria porque yo debi entrar por www.algo.com .

tambien en APACHE puedes crear Reglas de redireccionamientos, pero para esto ya debes ver en los manuales de APACHE, yo hice algo parecido y funciona mas que bien.

Saludos
__________________
Salute !!!
RollBack
  #3 (permalink)  
Antiguo 27/03/2005, 19:38
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
No encontre informacion acerca de la proteccion de Hot Links. Agradeceria me pudieran ayudar con este tema o con la utilizacion de alguna funcion de PHP para solucionar esto.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #4 (permalink)  
Antiguo 27/03/2005, 19:51
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Creo que tu solución son las sesiones ó constantes:
1.- Defines una constante en index.php
2.- Buscas esa constante/sesion en pagina.php
a) Esta definida?? muestras su contenido
b) No esta definida?? Blokeas.. ó yo redireccionaria a index.php

... El problema con las sesiones es limitar el tiempo de duración.. alguna vez lo discutí con Cluster.. pero no he probado nada... Dudo que tengas ese problema con constantes...

Para usar constantes necesitas las funcines define() y defined() ...
http://mx.php.net/define
Ve lo que dicen los comentarios de la página:
Cita:
This can be useful if you want to protect pages which get included from outsiders eyes, on your mail page (the page viewable by people) put define("X", null); then on all your other pages, you can then do something like:

if (!defined("X")) {
echo "You Cannot Access This Script Directly, Have a Nice Day.";
exit();
}

And your page is a good as protected :)
Espero te sirva. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 27/03/2005, 19:57
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
... Estoy leyendo que ocupas marcos... creo que esto no te servirá.. más bien es para include()... tons.. prueba con sesiones!!!

Suerte!
PD: Tema de sesiones hay en las FAQ.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 27/03/2005, 20:24
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
He estado tratando de utilizar la funcion $_SERVER['SCRIPT_NAME'], que me retorna la ruta completa. Trate de separar eso por los '/' pero no me funciona.
Aca algo del codigo que he utilizado :
Código PHP:
function buscar_archivo(){    
$lst_ruta split("/"$_SERVER['SCRIPT_NAME']);
$archivo $lst_ruta[sizeof($lst_ruta) - 1];
return 
$archivo;
}

if((
buscar_archivo() <> "index.php")){
    echo 
"Acceso no permitido";
}
else {
    echo 
"Acceso Correcto";

Espero que me puedan ayudar.
Gracias.
Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #7 (permalink)  
Antiguo 27/03/2005, 20:34
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Creo que de esta forma puede funcionar :
Código PHP:
function buscar_archivo(){    
    
$lst_ruta split("/"$_SERVER['SCRIPT_NAME']);
    
$archivo $lst_ruta[sizeof($lst_ruta) - 1];
    return 
$archivo;
}

if((
buscar_archivo() == "index2.php")){
    echo 
"Acceso Correcto ...";
}
else {
    echo 
"Acceso no permitido ...";

La pagina que debe mantenerse en la URL es index2.php.
Espero sus comentarios.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #8 (permalink)  
Antiguo 27/03/2005, 21:03
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Pero no funciona con frames
Lamentablemente no puedo cambiar el diseño de las paginas y no poner frames, ya que el sistema completo esta diseñado asi.
Tal vez, en vez de hacer $lst_ruta = split("/", $_SERVER['SCRIPT_NAME']) deberia hacerlo $lst_ruta = split("?", $_SERVER['SCRIPT_NAME']), pero tampoco funciona y aun continua el tema de los frames.
Existira una función de PHP que solo me retorne el nombre del archivo o pagina que aparece en el campo direccion del navegador (IExplorer) ?
Tal vez, tomando el archivo desde el cual hago referencia a los modulos, o sea, si HTTP_REFERER = archivo_menu.php el proceso estaria correcto.
Que creen uds. ?
Espero su ayuda.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE

Última edición por KillerBKS; 27/03/2005 a las 21:09
  #9 (permalink)  
Antiguo 28/03/2005, 09:50
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Una opinión sobre lo sgte:
He estado pensando en utilizar la funcion $HTTP_REFERER y con ella poder determinar de donde ha sido llamada la pagina.
Me han dicho que la funcion $HTTP_REFERER no es segura . Que opinan uds ?. Alguien tiene mayor conocimiento sobre esta funcion ?.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #10 (permalink)  
Antiguo 28/03/2005, 11:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Me han dicho que la funcion $HTTP_REFERER no es segura . Que opinan uds ?. Alguien tiene mayor conocimiento sobre esta funcion ?.
Gracias.
Pues no es segura como te han comentado .. es decir; como toda cabecera HTTP .. esta es enviada por el "cliente" que se conecta .. por ende ... se puede desde no entregar, hasta adulterar. De hecho la mayoría de navegadores .. si abres una ventana por javascript o te mueves entre frames/iframes no entregan esa información del HTTP_REFERER, .. algunas conexiones que pasan por proxy tampoco las entregan ..

---------------

Lo ideal es que uses sesiones .. Define una en tu página index.php o la que tengan que pasar para llegar a la segunda .. propaga el SID en cookies y en todas tus restantes páginas/scripts validas la existencia de esa variable de sesión. Si no existe es que entró directo.

Un saludo,
  #11 (permalink)  
Antiguo 28/03/2005, 11:49
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
OK, Gracias.
Pero, he usado sesiones y conozco bien su funcionamiento, pero con cookies no he trabajado mucho.
No entiendo bien como implementar tu sugerencia, agradeceria me explicaras un poco mas sobre la solución en si.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #12 (permalink)  
Antiguo 28/03/2005, 12:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por KillerBKS
OK, Gracias.
Pero, he usado sesiones y conozco bien su funcionamiento, pero con cookies no he trabajado mucho.
No entiendo bien como implementar tu sugerencia, agradeceria me explicaras un poco mas sobre la solución en si.
Gracias.

Salu2 !!!
Mi sugerencia va por el lado de usar sesiones .. sólo con la particularidad de propagar el SID en cookies (como para no complicarte con la propagación del SID) .. Si mencionas que ya has trabajado con sesiones .. supongo que estaras al tanto de eso no?.

En cualquier caso .. se trata de que definas en tu index2.php una variable de sesión:
Código PHP:
<?
session_start
();
$_SESSION['nose']=="da igual";
// etc ..
Y en ver_usuario.php por ejemplo ...
Código PHP:
<?
session_start
();
// validas su existencia ...
if (empty($_SESSION['nose'])){
die(
"No puedes entrar aquí directo ....");
}
// tu actual código ...
Da igual si trabajas con frames .. o no (siempre que el SID se propague) ... Pruebalo .. si no te funciona habrá que ver problemas con la propagación del SID (por eso te insisto que si se hace por cookies: session.use_cookies = ON .. uno se olvida del tema y no por ello pierdes seguridad ..).

Un saludo,
  #13 (permalink)  
Antiguo 28/03/2005, 12:55
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
OK, si, lo del SID ya lo sabia.

Ahora bien, viendo tu propuesta, al declarar la variable $_SESSION["nose"] == "da igual" en el index2.php esta durara mientras este abierta la pagina o presione el link "Salir".
Osea, cuando quiera acceder a una url http://localhost/ver_usuario.php?id=1&forma=a , podre acceder de igual manera ya que la validación :
Código PHP:
<? 
session_start
(); 
// validas su existencia ... 
if (empty($_SESSION['nose'])){ 
die(
"No puedes entrar aquí directo ...."); 

?>
if (empty($_SESSION['nose'])){ // esto me retorna verdadero, ya que la cree en index2.php.
Esta validacion es similar a la utilizada en el Autentificator.

Tengo session.use_cookies = On
O tal vez entendi mal la solución.
Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE

Última edición por KillerBKS; 28/03/2005 a las 13:04
  #14 (permalink)  
Antiguo 28/03/2005, 14:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
if (empty($_SESSION['nose'])){ // esto me retorna verdadero, ya que la cree en index2.php.
Esta validacion es similar a la utilizada en el Autentificator.
mm Bueno devuelve "false" por qué no esta "vacia" (eso es lo que define empty() .. no es lo mismo que isset()) .. y no se trata de eso? .. es decir .. que pase por tu index2.php para llegar a "ver_usuario.php"?

Cuando cierres todas tus ventanas de tu sitio (web) . .y pretendas acceder a ver_usaurio.php .. no existirá dicha variable de sesión. Lo mejor es: probarlo.

Un saludo,
  #15 (permalink)  
Antiguo 28/03/2005, 14:23
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Tal vez no esta bien claro que lo deseo.
En resumen, el tema es que de ninguna forma los usuarios escriban en el campo dirección del navegador la url http://localhost/ver_usuario.php?id=111&forma=a.
Como uso frames, la dirección siempre aparece como http://localhost/index2.php
Entonces, lo que quiero es no permitir el ingreso de la url completa, aunque algunas de las paginas/script son llamadas de la forma http://localhost/ver_usuario.php?id=111&forma=a , con la diferencia que esos links son generados en los menus de la aplicación.
Espero ahora se entienda mejor la situación.
Gracias Cluster.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #16 (permalink)  
Antiguo 28/03/2005, 14:46
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero . .has probado lo que te propongo?

¿Por qué tanta paranoia de que no acedan a?:
http://localhost/ver_usuario.php?id=111&forma=a.

Si lo haces por algún tema de que tal usuario no vea otro usuario . .entonces es hora de que en esa variable de sesión justamente guardes y gestione eses ID usuario .. para que sólo pueda verse a si mismo por ejemplo (su perfil) o dependiendo de niveles de usuarios pueda ver hasta donde su nivel se lo permita.

Si lo haces por qué te "rompe el formato" de tu web .. la solución pasa por javascript. Con javascript puedes detectar si tu página es llamada bajo el frame "padre" (que defines en index2.php) o sola como para llamarse a si misma bajo el frame que corresponda.

Un saludo,
  #17 (permalink)  
Antiguo 28/03/2005, 14:55
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Claro, pasa por un tema de seguridad, accesos. La idea tambien esta relacionada con los perfiles de usuarios. Un usuario tipo soporte, por ejemplo, solo podra agregar, modificar y ver productos, pero no eliminar productos. Un usuario administrador puede agregar, modificar, ver y eliminar productos.
Pasa que estoy modificando o arreglando una aplicación que ya estaba construida. No comence todo de nuevo por que es bastante grande. Estoy agregando el tema de los permisos y privilegios :
Código PHP:
if ($_SESSION["TIPO_USUARIO"] == 1) {
     
//permito el acceso
}
else {
    
//no permito el acceso

Pero se me habia ocurrido que podia ser mas facil controlar ese tema. Tal vez agregar un par de lineas en el archivo seguridad.php, que controla el tema de las sesiones, y no tener que agregar lineas adicionales a cada pagina/script.
Eso.

Gracias de nuevo.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
  #18 (permalink)  
Antiguo 28/03/2005, 15:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues debes agregar ese tipo de validación donde el código que haga tal acción se ejecute .. así de simple y de "tedioso" si estás parcheando una aplicacción ya hecha y grande.

Un saludo,
  #19 (permalink)  
Antiguo 28/03/2005, 15:11
 
Fecha de Ingreso: julio-2002
Ubicación: Rancagua - Chile
Mensajes: 494
Antigüedad: 21 años, 9 meses
Puntos: 0
Bastante tedioso, habra que hacerlo nada mas.

Gracias.

Salu2 !!!
__________________
AK.T.I.V.E.tm Live, Never DIE
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 17:09.