El espacio en blanco en archivos PHP a veces es problemático, así que estoy tratando de encontrar archivos que cumplan con los criterios problemáticos comunes. Estoy tratando de encontrar todos los archivos recursivamente que tienen una o ambas condiciones:Buscar archivos PHP de inyección de espacio en blanco
1) No comienza con un carácter <
o #
.
y/o
2) no termina en un personaje >
, a menos que termina en una llave de cierre que es seguido por cualquier cantidad de saltos de línea.
creo que la primera condición sería: $[^<#]
Creo que la segunda condición sería: [ [^>^] | [}\n*^]]
Sin embargo, cabe destacar que en mis expresiones regulares ingenuos $
y ^
represento el inicio y el final de la archivo, no de ninguna línea en el archivo. E incluso con aquellos, suponiendo que fueran correctos, ¿cómo los combinaría? ¿Al igual que?
[$[^<#]] | [[ [^>^] | [}\n*^]]]
A continuación, ponerlos en grep:
grep -r [$[^<#]] | [[ [^>^] | [}\n*^]]] *
Obviamente, esto no está funcionando (tm). ¿Puede alguien enseñarme cómo corregir los errores? Gracias.
Este es un buen archivo:
<?php
?>
Así es la siguiente:
<?php
function someFunc(){
}
Y esto también es bueno:
#!/usr/bin/php -q
<?php
?>
líder HTML está bien:
<html>
<?php
echo '</html>';
?>
arrastra HTML está muy bien también:
<?php
echo '<html>';
?>
</html>
Esto es malo (nueva línea de ataque):
<?php
?>
Esto es demasiado malo (espacio inicial):
<?php
?>
Esto es malo como bien (línea nueva posterior):
<?php
?>
Una de las formas más fáciles de evitar este problema es NO incluir un '?>' De cierre al final de los archivos. Este es un PHP válido, y está incluido en muchos estándares de codificación PHP, incluido el estándar de codificación PEAR. Terminar los archivos con '?>' Es buscar problemas. –
Una idea que podría considerar: activar el búfer de salida, 'include()' el archivo y ver si el resultado que genera cuando lo incluye tiene espacio en blanco inicial/final. –
Gracias Frank. Sin embargo, los archivos que terminan en '?>' Son archivos PHP válidos, no desencadenan el error y son muy comunes. No voy a discutir con otros desarrolladores sobre el tema y cambiar su estilo de codificación, solo quiero automatizar el proceso de búsqueda de archivos problemáticos para mí. – dotancohen