Advertisement

Responsive Advertisement

Algunos tips de seguridad en PHP


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
$_COOKIE

Por 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.

Publicar un comentario

0 Comentarios