Estuve viendo que en algunos casos se puede insertar codigo malicioso en la URL de manera que nuestro sitio ejecute acciones (como pudiera ser abrir ficheros externos) que no sean las que nosotros programamos.
Suponiendo que en la URL yo traigo dos parametros:
1- al ser sitio dinamico, la pagina que se incluira en la plantilla(entendida como la interfaz unica comun en todas las paginas) general(Le pondremoos el nombre hipotetico 'p').
2- identificador de un determinado registro en una BD(le pondremos el nombre hipotetico 'id').
Dado esto, y puesto que las verificaciones de 'p' estan directamente en la pagina index, me centro solo en 'id' y realizo lo siguiente:
Código PHP:
<?php
if(!isset($_GET['id'])){
header('Location: index.php');
//SI NO EXISTE, REDIRIJO A INICIO, PODRIA HACER CUALQUIER OTRA COSA, PERO PARA SALIR DEL PASO ELIJO ESTA CONSECUENCIA
}else if(count($_GET) > 2){
header('Location: index.php');
//SI HAY MAS DE DOS PARAMETROS (ES DECIR, FUE AÑADIDO UNO A MANO POR URL), REDIRIJO A INICIO
}
$id = urldecode($_GET['id']);
$id = trim($id);
$id = seguro($id);
/*ESTAS FUNCIONES SON POR SI ALGUIEN AÑADE ALGO A LA URL MANUALMENTE
Y LOGRANDO SALTAR EL PRIMER FILTRO (DE CANTIDAD DE PARAMETROS,
ES DECIR, QUE LO AÑADEN AL PARAMETRO ID).
La funcion seguro es definida por el usuario (en este caso yo)
y realiza cosas como reemplazar TODO tipo de caracteres especiales,
escapar caracteres, sacar tags html, etc. */
?>
------------------------------------------------------------
Por otro lado, he visto tambien que los include tienen ciertas vulnerabilidades. Por tanto, me pregunto si el siguiente codigo las presenta:
Código PHP:
<?php
if(!isset($_GET['p']) || 'index.php' == $_GET['p']){
include 'home.php';
}else{
$p = $_GET['p'];
include $p;
}
?>
-Dado un array secuencial (llamemosle '$pes') con todos los valores del parametro 'p' posibles, codeamos:
Código PHP:
<?php
function inclusionSegura($p,$pes){
$seguro = FALSE;
for($it = 1; $it <= count($pes); $it++){
if($p == $pes[$it]){
$seguro = TRUE;
return $seguro;
}
}
if(FALSE == $seguro){
return $seguro;
}
}
//Luego, en index, hago:
if(FALSE == inclusionSegura($p, $pes)){
echo '<script type="text/javascript">window.location="http://www.google.com";</script>';
/*Aqui lo mando a google si me incluye una pagina que no esta en lo previsto.
Lo hago por javascript ya que, al haber insertado html previamente en index.php,
no me deja modifcar la cabecera. */
}else{
include $p;
//finalmente tenemos un $p que sabemos que es de nuestra pagina, asique lo incluimos tranquilos
}
?>
Bueno, me pregunto si esto tiene problemas de seguridad y como los puedo solucionar, o que le puedo agregar para que sea mejor.
Otra cosa que me resulto interesante hacer es: cambiar el array secuencia $pes por uno asociativo que tenga el nombre de la pagina a incluir y el numero de parametros que recibe y hacer una verificacion mas, que compruebe que ambos sean correcto. Pero bueno, primero me aseguro que esto valga la pena.
Disculpen las molestias y desde ya agradeco la ayuda.
Saludos!