rulu ruru

postAlgunos tips de seguridad en php

February 24th, 2008

Filed under: PHP — admin @ 2:23 pm

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.

Enlaces pagos


2 Comments »

  1. Hola solo paso a felicitarte por el blog, me interesa mucho de php y me baje algunos codigos para leerlos cuando este al pedo, nose si seguis con ese curso de php ???

    Saludos

    Comment by zarpele — March 23, 2008 @ 9:03 pm

  2. No, el curso no más.
    Pero seguramente siga dando tips, y codigos en el sitio :)

    Gracias por la replica en tu blog ;)

    Comment by admin — March 23, 2008 @ 11:32 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment

You must be logged in to post a comment.

ruldrurd
Entries (RSS) and Comments (RSS)