Foros del Web » Programando para Internet » PHP »

Formulario Seguro

Estas en el tema de Formulario Seguro en el foro de PHP en Foros del Web. Me supongo que esta pregunta será muy común y tendrá fácil respuesta. El tema seria: ¿ Aparte de insertar un sistema de autentificación para el ...
  #1 (permalink)  
Antiguo 30/07/2003, 04:24
 
Fecha de Ingreso: julio-2003
Ubicación: Europa
Mensajes: 37
Antigüedad: 21 años, 4 meses
Puntos: 0
Formulario Seguro

Me supongo que esta pregunta será muy común y tendrá fácil respuesta.

El tema seria:

¿ Aparte de insertar un sistema de autentificación para el usuarios, si quisiera mantener un formulario seguro y impedir que un usuario copie el formulario desde un localhost o servidos intente insertar algún dato ?

Se podría hacer que al insertar el formulario copiara algunas variables predefinidas y antes de realizar el INSERT cotejara que por ejemplo el $SERVER_NAME, $HTTP_HOST y $SERVER_SIGNATURE se corresponden con los del servidor en el que se pretenden insertar los datos.

Me gustaría alguna repuesta con los posibles fallos que hacer esto acarrearía.

Salu2, Espero que la pregunta no sea muy estupida

Última edición por arcange|; 31/07/2003 a las 05:04
  #2 (permalink)  
Antiguo 30/07/2003, 22:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Bueno .. hay una forma simple de enviatar que te "usen" tus formularios de forma externa (a la de tu sitio) ..

Se trata de ver el "HOST" si es el mismo que el que ejecuta el script (el HTTP_REFERER) .. todo esto variables de servidor que se pueden "engañar" medianamente facil (con proxys por ejemplo) y que pueden dar problemas con lo mismo (proxys de intranets y cosas así que no entregan ese valor ...)

Si quieres probarlo:
Código PHP:
<?
if (!@eregi($_SERVER['HTTP_HOST'],$_SERVER['HTTP_REFERER'])){
    
header ("location: seguridad.php");
    exit;
}
?>
El ejemplo es simple .. se usan expresiones regulares para ver si la cadena "HOST" (el que corresponda) está en el HTTP_REFERER (URL) .. si no es así .. se redirecciona a otra página y se termina el script (por eso mismo ese código debería ir al principio de tus páginas .php .. antes del resto de HTML que pueda existir a continuación ..)

Otra solución más segura es usar sesiones .. donde para llegar a tu formulario pasarían por alguna otra página de tu sisitio en la que crearias tu variable de sesión (tu formulario mismo al entrar) .. y .. en tu script de proceso de esas variables del formulario (sea la misma "página" u otra) verificas si está creado esa variable de sesión .. si no es así . no continuas el proceso.

Otra solución más .. seguro que con algún comando para un .htaccess (de Apache) (ahora no recuerdo bien .. algo de GET o un allow from la IP de tu servidor .. ).

Un saludo,

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 31/07/2003, 06:12
 
Fecha de Ingreso: julio-2003
Ubicación: Europa
Mensajes: 37
Antigüedad: 21 años, 4 meses
Puntos: 0
Conclusion

Código PHP:

<?
if__
(!@eregi($_SERVER['HTTP_HOST'],$_SERVER['HTTP_REFERER'])){
____header_("location: seguridad.php");
____exit;
}
?>
Creo que esto quiere decir esto ( seguramente estoy confundido )


<?

if /* es una de las más importantes características de muchos lenguajes, incluido PHP. Permite la ejecución condicional de fragmentos de código. */
(!@

/* Soy un poco novato y no entiendo esto - alguno podria esplicarmelo */

eregi

/*-- coincidencia de expresiones regulares sin diferenciar mayúsculas y minúsculas - Esta función es idéntica a ereg(), excepto en que ignora la distinción entre mayúsculas y minúsculas. */

([$_SERVER['HTTP_HOST']

/* HTTP_HOST - Supongo que
es la función predefinida que indica el host.
Contents of the Host: header from the current
request, if there is one. - cargaría la variable
predefinida ósea la ruta del host, http://<br /> <a href="http://www.f...delweb.com</a> por ejemplo */

,$_SERVER['HTTP_REFERER']

/* HTTP_REFERER - Analiza la url de la que proece de la consulta osea que si entra desde localhost/formulario.php al cotejar host con la referer daria un resultado fallido. The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. http://www.forosdelweb.com/s/msg144789.html */

) // cerramos !@eregi()
) // cerramos el if ()
{ //abrimos el corche para este resultado

header("location: seguridad.php");

/* La función header() se utiliza al comienzo de un fichero HTML para enviar las cadenas de texto de la cabecera HTTP */


/* Esto seria la redirección en caso de que no encontrara www.forosdelweb.com en $_SERVER['HTTP_REFERER'] */


exit;

/*
Esta construcción del lenguaje finaliza la ejecución del script. No devuelve nada.
*/


} //cerramos el corche
?>


Creo ques = a tu esplicación ( Esta bien analizado no estoy mu confundido )

Cito a: Cluster
El ejemplo es simple .. se usan expresiones regulares para ver si la cadena "HOST" (el que corresponda) está en el HTTP_REFERER (URL) .. si no es así .. se redirecciona a otra página y se termina el script (por eso mismo ese código debería ir al principio de tus páginas .php .. antes del resto de HTML que pueda existir a continuación ..)


Mi conclusión muy poco inteligente como siempre: Creo que esto es lo que hace el script pero no estoy muy seguro lo tendré que mirar en el localhost, alguno me podría explicar por que !@eregi no enteindo lo de !@ cual es su función en el script.


El tama de las sesiones lo estoy investigando y podré pro aquí o en otro post mis dudadas o conclusiones. Si es que creo que puedo ayudar a algun visitate.

Última edición por arcange|; 31/07/2003 a las 06:17
  #4 (permalink)  
Antiguo 31/07/2003, 07:47
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 9 meses
Puntos: 5
! es el signo de negacion (operador logico NOT)
@ se usa para silenciar errores
__________________
Manoloweb
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 22:28.