Mi otro yo

Páginas: 5 (1205 palabras) Publicado: 28 de agosto de 2012
Seguridad en PHP

PREMISA FUNDAMENTAL

- En ingles se dice: "Filter input, Escape output". Seria, filtrar la informacion que entra, y "escapar" la info que se muestra. (nose como traducir escape )

Esto significa que hay que verificar toda la informacion que ingresa el usuario para ver que sea SOLO la que nosotros quremos. Este es el punto mas importante en la seguridad de nuestroscript/programa.
Tambien significa que hay que tomar las medidas necesarias, para que cuando mandemos informacion al usuario, esta se muestre sin problemas de seguridad.

Para que quede claro...no confien en ninguna informacion ingresada por el usuario. Verifiquen todo ustedes mismos!
Si no lo hacemos, el usuario puede ingresar (a proposito o no) informacion que hara actuar a nuestro scriptde forma distinta a la que nosotros queremos. Este puede llevar a que nos hackeen el sitio, la base de datos, el servidor, etc...

VALIDAR FORMULARIOS

- Siempre filtren/validen toda la info que ingresen los usuarios. Si solo tienen que ingresar su edad (un numero entero) validen que solo esten ingresando numeros. Si solo tienen que ingresar su nombre...entonces no necesitan ingresar elsimbolo ?. Validen eso tambien.

- Para Validar numeros usen la funcion ctype_digit(), is_numeric() o expresiones regulares para cosas mas complejas.

- Para validar caracteres usen ctype_alnum() o ctype_alpha().

- Validen el formato de las direcciones de email. Para eso pueden usar expresiones regulares.

- Cuando tengan que asegurarse que un numero es entero, otra opcion es usar(int) antes de la variable (Type Casting). Eso se va a asegurar que todo dato en esa variable sea un entero.

- No usen solamente Javascript para validar datos. Javascript no ofrece real seguridad. Siempre validen todos sus datos del lado del servidor (con PHP en este caso).
Lo ideal es validar los datos con Javascript Y PHP. Javascript lo hace rapido,facil y lindo para el usuario. Pero PHPse encarga de que nadie nos hackee
(Javascript puede ser deshabilitado con unos clicks en su navegador)

- Comprueben que el formulario es enviado desde su sitio chequeando el valor de $_SERVER['HTTP_REFERER'] (Gracias Tux). Esto se hace simplemente comprobando que el valor de HTTP_REFERER sea igual al nombre de nuestro sitio.
Tengan en cuenta que esto no es muy confiable, ya que elvalor enviado por los navegadores puede ser facilmente altereado por cualquier usuario. Igualmente, es una medida mas que podemos implementar para, entre otras cosas, frenar el spam desde nuestros formularios.

Ejemplo de Type Casting:
Código PHP:
$numero = 10.90;
$variable = (int) $numero;
echo $variable; // Imprime 10

$numero = 'Nicolas';
$variable = (int) $numero;echo $variable; // Imprime 0 
Ejemplo de validacion de numeros:
Código PHP:
if (ctype_digit($edad)) {
       echo 'La edad es valida.';
} else {
       echo 'La edad NO es valida.';

Ejemplo de validacion de email:
Código PHP:
if (!preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/", $email)) {
     exit('El formate del email ingresado no es correcto.');

Ejemplo de validacionde HTTP_REFERER:
Código PHP:
$hosts_permitidos = array('www.misitio.com.ar', 'misitio.com.ar');
$referer = $_SERVER['HTTP_REFERER'];
$temp_referer = explode('/', $referer);
if (!in_array($temp_referer[2], $hosts_permitidos)) {
     // ESTE HOST NO TIENE PERMISO
     exit('No tenes permiso para acceder al formulario.');

Links:
http://ar.php.net/manual/en/function.ctype-digit.phphttp://ar.php.net/manual/en/function.ctype-alnum.php
http://ar.php.net/manual/en/function.ctype-alpha.php
http://ar2.php.net/manual/en/reserved.variables.php

SQL INJECTIONS
- Usar mysql_real_ecape_string() cuando se ingresa info a la base de datos.
Si usan una base de datos distinta a MySQl, ver si hay alguna funcion nativa para ella o usar addslahses()

Ejemplo:
Código PHP:...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS