Foros del Web » Programando para Internet » PHP »

Expresiones regulares y errores

Estas en el tema de Expresiones regulares y errores en el foro de PHP en Foros del Web. Buenas compañeros, Estoy haciendo una web para construir expresiones regulares. Algo bastante sencillo. El caso es que quiero hacer que los usuarios puedan testear las ...
  #1 (permalink)  
Antiguo 05/07/2013, 00:24
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Expresiones regulares y errores

Buenas compañeros,

Estoy haciendo una web para construir expresiones regulares. Algo bastante sencillo.

El caso es que quiero hacer que los usuarios puedan testear las expresiones. No tengo ningun problema en ejecutarlas en PHP. Mi duda es si puede existir un problema de seguridad otorgando al usuario poder ejecutar una expresión, lo haria de este modo:


Código PHP:
Ver original
  1. if (preg_match($_POST['expresion_del_usuario'], $string))
  2. {
  3.     echo "La expresión funciona!";
  4. }

Mi miedo es que me metan codigo o me la lien. ¿Que pensais?. Debe hacerlo obligatoriamente con PHP.

  #2 (permalink)  
Antiguo 05/07/2013, 00:48
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Expresiones regulares y errores

Mira cómo lo hacen ellos:
http://www.solmetra.com/scripts/regex/
http://www.regexe.com/

y todos estos: https://www.google.de/search?q=perl+...w=1366&bih=608
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 05/07/2013, 01:00
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Sí conozco varios de esos. Pero no me solucionas el problema, :) . Mi problema no esta en como validar las expresiones. Mi problema esta en el terror que me da permitir a los usuarios poder incorporar la expresión y si existe riesgo en ello.

¿Me explico?. Realmente los ejemplos que pones son basicamente lo que quiero hacer. Pero evidentemente no puedo ver como lo hacen, o si lo hacen bien y es estable.

Tengo casi todo montado, y lo queria sacar esta semana... pero me estaba entrando mal rollo.
  #4 (permalink)  
Antiguo 05/07/2013, 06:28
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Expresiones regulares y errores

http://stackoverflow.com/questions/4...ode-into-regex
__________________
Fere libenter homines, id quod volunt, credunt.
  #5 (permalink)  
Antiguo 05/07/2013, 07:04
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Uf, acabo de terminar de leer. Se me han quitado las ganas. Uf!... que liada. Lo veo tan inseguro.

Es que lo tengo alojado en un servidor con mucho contenido.

Una pena!,

:P
  #6 (permalink)  
Antiguo 05/07/2013, 12:35
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Expresiones regulares y errores

Pues lo que dice el articulo...y tiene sentido es que a lo maximo que te pueden hacer es injectar una expresion recursiva irresoluble que consuma toda la memoria o el tiempo de ejecucion.

En este caso tu podrias prevenir que esto pase mas de 1 vez asi: te guardas en DB cual fue la expresion que vas a probar y en caso de Error Fatal mediante register_shutdown_function() registras en un archivito log si esa expresion hizo explotar el script. Para prevenir mas problemas y que se convierta en un DoS, tocaria controlar cuantos hilos pueden acceder a esa funcionalidad de probar expresiones regulares.

Ya si tu haces un eval() pues la cosa es mas complicada.
__________________
Salu2!
  #7 (permalink)  
Antiguo 06/07/2013, 02:46
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Buenas de nuevo,

Hoy me he levantado con fuerzas. Me he puesto hacer el código, pero la verdad es que no se por donde empezar.

¿Como debo incluir el register_shutdown_function en este codigo?

Código PHP:
Ver original
  1. echo "Validamos la expresión:";
  2.  function supererror(){
  3.        echo 'La expresión es maliciosa';
  4.   }
  5.  
  6.  
  7.  
  8. if (preg_match($_POST['expresion_del_usuario'], $string))
  9. {
  10.     echo "La expresión funciona!";
  11. }

:P, ya siento ser tan patoso.

pd: sin vuestra ayuda, realmente no podria hacerlo... gracias!
  #8 (permalink)  
Antiguo 06/07/2013, 10:52
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Expresiones regulares y errores

Amigo mas bien, seria algo asi:

Código PHP:
<?php
define
("LOG_FILE""warning_regx.log");

function 
shutdown()
{
   
// Podria ser que la ultima expresion probada, fuera maliciosa asi que me la guardo en un archivo log

    
global $__datetime_before_execute_regex;  
    global 
$__user_regex_ok;

    if  (!isset(
$__user_regex_ok) or (!$__user_regex_ok)){
      
$now date("d-m-Y H:i:s"); 

      
file_put_contents(LOG_FILE"{$_POST['expresion_del_usuario']};$__datetime_before_execute_regex;$now;\n"FILE_APPEND LOCK_EX);
    }
}

register_shutdown_function('shutdown');


$__datetime_before_execute_regex date("d-m-Y H:i:s");  // Justo antes de evalular
$__user_regex_ok preg_match($_POST['expresion_del_usuario'];

if (
$ok$string))
{
    echo 
"La expresión funciona!";
}
En el archivo log yo me guardaria tambien el ID del usuario, la IP, la fecha y hora del posible ataque y todo lo que tengas disponible.

Aclaro que si la expresion al evaluarse da FALSE, se va a guardar en el archivo LOG pero luego se descartaria como falso positivo por ejemplo por el momento en que se ejecuto vs momento en que se detuvo el script
__________________
Salu2!

Última edición por Italico76; 06/07/2013 a las 12:15
  #9 (permalink)  
Antiguo 07/07/2013, 02:49
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Hola Italico76,

Antes de nada... gracias!.

He estado probando tu código y tengo una duda.

Segun tu, la linea:

Código PHP:
Ver original
  1. $__user_regex_ok = preg_match($_POST['expresion_del_usuario']);
Devuelve true si la expression no es maliciosa?.

Y otra... ¿sabes de alguna expresion maliciosa para testear el codigo?.

Es que he estado probando alguna expression que se que es correcta y me devuelve false.

Voy a investigar... muchas gracias por tu ayuda!
  #10 (permalink)  
Antiguo 07/07/2013, 07:47
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Expresiones regulares y errores

@0123: hola... es que me comí un parametro, el segundo:

Cita:
$__user_regex_ok = preg_match($_POST['expresion_del_usuario'], $string);
Ten en cuenta:

- Nada de este codigo fue probado....o sea... es un bosquejo puede tener errores que debas depurar.

- En lugar de usar variables globales podrias pasarlas por referencia a register_shutdown_function() o sea con un & delante
__________________
Salu2!
  #11 (permalink)  
Antiguo 07/07/2013, 08:24
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Buenas Italico76,

Ok... jeje... muchas gracias!

Un placer!
  #12 (permalink)  
Antiguo 08/07/2013, 07:40
Avatar de 0123  
Fecha de Ingreso: noviembre-2012
Ubicación: Entre la consola, el coda y un poco de photoshop
Mensajes: 263
Antigüedad: 12 años
Puntos: 10
Respuesta: Expresiones regulares y errores

Hola de nuevo a todos,

¿Alguien tiene una expresion regular maliciosa?... es que no se como testear mi codigo sin una. He consultado Google, pero no encuentro nada... jeje.

:D

Etiquetas: errores, expresiones, regulares, 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




La zona horaria es GMT -6. Ahora son las 16:48.