Tengo un sitio web en php que incluye() para incrustar el contenido en una plantilla. La página para cargar se da en un parámetro get, agrego ".php" al final del parámetro e incluyo esa página. Necesito hacer un control de seguridad para evitar XSS u otras cosas (no inyección de mysql ya que no tenemos una base de datos). Lo que se me ocurrió es lo siguiente.
$page = $_GET['page'];
if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
!strpos($page, '\\') || !strpos($page, '..')) {
//append ".php" to $page and include the page
¿Hay alguna otra cosa que pueda hacer para sanitizar aún más mi entrada?
No marque el resultado de strpos() así - devolverá cero si la coincidencia está al comienzo de la cadena, que evaluará a falso –
@Tom, la solución aceptada permite yo también lo evito, de todos modos, gracias, recordaré tu consejo para el código futuro. –
Vea también: http://stackoverflow.com/a/15825812/59087 –