Hace días vengo observando constantes “Scaneos” hacia las webs que hosteamos en invisionarg, lo más extraño de esto, es que los escaneos provienen de servidores web infectados, y nosotros seríamos uno de esos si no contaramos con mod_security.
La seguridad en PHP es algo que no se debe dejar de lado, y si te considerás un buen coder deberías estar asumiendo que todos tus códigos deben SER SEGUROS.
Para empezar, hay diferentes formas de asegurar tu código, pero la principal siempre es: Comprobar todo lo que pueda ser enviado por el usuario hacia tu sitio web.
¿Qué variables datos puede enviar un usuario a mi sitio web?
Hablamos de usuarios, cuando los usuarios normales van a llenar los datos como corresponde, sin embargo hay usuarios y scaners mal intencionados que lo que harán es enviar cierta información a nuestro sitio web con el fin de explotar una falla de seguridad.
Las variables que pueden ser enviadas por el usuario son:
$_POST$_GET$_COOKIEPor otro lado, hay gente que por nueva en esto y necesidad economica, trabaja y no sigue los pasos coherentes.
Si usamos las variables GET (Que son las variables que se envian mediante la URL) debemos comprobar de diferentes formas.
Por ejemplo, tusitio.com/?seccion=contactenos … Ví casos en los que en el código se incluye
include($_GET[seccion].”.php”);Está MAL, puede derivar en una falla de seguridad enorme, y sin saberlo ayudar a los mal intencionados a tener mayor cantidad de Bots, o si bien perjudicar a tu cliente, o a vos mismo si el sitio es personal.
Una manera segura de manejar secciones de esa manera:
switch($_GET["seccion"]) {case “contactenos”:*include(“contactenos.php”);break;
default:include(“error.php”);
}Podemos armar una clase, o armalo con IF and Elseif, pero nunca directamente.
Otro de los casos que ví es que envian directamente a la BD los datos ingresados por el usuario, inclusive el ID
por ejemplo : tupagina.com/?id=1 -> envio acá por metodo post: nombre y apellido
mysql_query(“insert into tabla (nombre,apellido,seccion) values (‘$_POST[nombre]‘,’$_POST[apellido]‘,’$_GET[id]‘)”,conexion);Está MAL
la manera correcta sería comprobar y tirar un error si no se cumple el parametro, por ejemplo:
if (!eregi(“^[a-z áéíóúñ]{1,15}”,$_POST["nombre"]) || !eregi(“^[a-z áéíóúñ]{1,15}”,$_POST["apellido"]) || !ereg(“^[0-9]+$”,$_GET["id"])) {echo “Error”;}
else {$id = mysql_real_escape_string($_GET["id"]);$nombre = mysql_real_escape_string($_POST["nombre"]);$apellido = mysql_real_escape_string($_POST["apellido"]);
mysql_query(“insert into tabla (nombre,apellido,seccion) values (‘$nombre’,'$apellido’,'$id’)”,conexion);
}En fin, por ahora esto es solo un tip de seguridad y espero que sirva.
0 Comentarios