Buenas, cuando intento causar Dos en javascript mediante expresiones regulares causa un DoS
var a = '11111111111111111111111111111111111a';
if(/^(\d+)+$/.test(a)){alert(1);}
Pero en PHP no causa Dos y estoy tratando de reproducir lo que sirdarckcat escribió y nada
Cita de: http://foro.elhacker.net/nivel_web/hackea_a_elhackernet_finalizado_ganador_yasion-t275475.0.html;msg1357128#msg1357128en PHP, PREG va a suspender la ejecucion despues de N iteraciones y alterara la memoria donde esta almacenada la variable de tal forma, que se borraran los ultimos 3 bytes dentro de esta.
Por defecto en PHP el limite de marcha atras es de
100,000pcre.backtrack_limit (http://www.php.net/manual/es/pcre.configuration.php#ini.pcre.backtrack-limit)
<?php
$a = str_repeat(1,16);
$a .= 'a';
echo "La longitud es de ".strlen($a). "<br>";
if(preg_match("/^(\d+)+$/",$a));
echo "La longitud es de ".strlen($a). "<br>";
if (preg_last_error() == PREG_BACKTRACK_LIMIT_ERROR) {
echo 'Se ah exedido el limite<br>';
}
?>
Salida:
La longitud es de 17
La longitud es de 17
Se ah exedido el limite
La longitud de la variable no se artera ni nada similar...
era algo especifico de la expresion regular que hacia que php borrara esos ultimos caracteres.. habria que debugear el estado en el que se suspende otra vez.
Bueno algo eh leído en la documentación oficial de PCRE, de momento me conformo con lo que eh leído...
Saludos.
yoya, estas leyendo algo en especial sobre el tema? tenes algo por ahi de preferencia en español?
yo estuve leyendo lo de owasp, pero es un tema jodido
http://n3t-datagrams.net/papers/reDOS-n3t-datagrams-by-SH4V.pdf
Esta en español y muy buen explicado, te recomiendo que tomes una hoja y lápiz para entenderlo.
Si tienes dudas ps posteas en este mismo POST.