Otra forma de desinfectar la entrada es para asegurarse de que sólo los caracteres permitidos (no "/", ", "": ", ...) están en eso. Sin embargo, no use una lista negra para malos personajes, pero una lista blanca de caracteres permitidos:
$page = preg_replace('[^a-zA-Z0-9]', '', $page);
... seguido de un file_exists.
De esta manera puede asegurarse de que solo se ejecuten las secuencias de comandos que desea ejecutar (por ejemplo, esto excluiría un "blabla.inc.php", porque "." No está permitido).
Nota: Esto es como un "truco", porque entonces el usuario podría ejecutar "h.o.m.e" y le daría a la página "de inicio", porque lo único que hace es eliminar todos los caracteres prohibidos. No tiene la intención de detener a los "listos" que quieren cosas lindas con tu página, pero detendrá a la gente haciendo cosas realmente malas.
Por cierto: Otra cosa que podría hacer que en .htaccess archivo es prevenir intentos de ataque obvias:
RewriteEngine on
RewriteCond %{QUERY_STRING} http[:%] [NC]
RewriteRule .* /–http– [F,NC]
RewriteRule http: /–http– [F,NC]
De esta manera todos los accesos a las páginas con "http:" url (y cadena de consulta) como resultado un mensaje de error "Prohibido", que ni siquiera llega al script php. Eso resulta en menos carga del servidor.
Sin embargo, tenga en cuenta que no se permite "http" en la cadena de consulta. Su sitio web PUEDE PEDIRLO en algunos casos (quizás al completar un formulario).
BTW: Si puede leer alemán: También tengo un blog post sobre ese tema.
Si es posible, evite incluir archivos dinámicamente por completo. 'include', como has experimentado, es casi tan peligroso como' eval'. – tdammers