¿Hay alguna posibilidad de pasar esta comparación débil? ¿Puede el usuario ingresar un archivo con una extensión no contenida en $ permitido y pasar la verificación de seguridad?
$allowed = array('txt','docx');
if (isset($_REQUEST['file'])) {
$file = $_REQUEST['file'];
if (preg_match('#\.(.+)$#', $file, $matched) && isset($matched[1]) && !in_array($matched[1], $allowed))
echo 'You can not pass beacause extension is bad';
}
}
Si el código anterior devuelve que es la extensión correcta. Hay siguiente validación:
if (strrpos($file, '.') !== false)
$ext = substr($file, strrpos($file, '.'));
else
$ext = '';
Me pregunté si puedo ingresar algo que omita todo cheque y en variable $ ext = ''; Tengo algo como 'jpg' o 'bmp' lo que está fuera de la tabla permitida. Es un ejemplo de verificación extraña que encontré en el servidor hasta la penetración.