Tengo un script que tiene este código:
$name = preg_replace('/[^a-z0-9_.]/', '', $_GET['name']);
$ _GET ['name'] = ../../conf.php pero preg_replace filtró mi barra (/) y $ name será ... conf.php ¿Puedo evitarlo?
Tengo un script que tiene este código:
$name = preg_replace('/[^a-z0-9_.]/', '', $_GET['name']);
$ _GET ['name'] = ../../conf.php pero preg_replace filtró mi barra (/) y $ name será ... conf.php ¿Puedo evitarlo?
Probablemente no. Es un regex de lista blanca (el ^ es un no) que reemplaza cualquier cosa que no sea literalmente a-z o 0-9 o subrayado o punto con nada: lo elimina.
En realidad, es la forma recomendada de hacerlo si puedes: al ser tan restrictivo con lo que está permitido, eliminan los caracteres de control, las barras diagonales, el escape (% o &), todo lo que pueda romperlo.
Lo mejor que puedes hacer que puedo ver es "..", lo que podría hacer que abra el directorio principal y te proporcione información, pero probablemente no.
Lea otras preguntas en las etiquetas attacks encryption exploit xss php