jueves, 5 de noviembre de 2009

Seguridad en php: validación y filtro (POST, GET) - parte 1

Temas a tratar:

  • intval() - v
  • mysql_real_escape_string() -s
  • md5() - s
  • htmlspecialchars() - s


intval() - validación: obtiene el valor numérico de una variable (entero). Si la variable no fuera numérica el valor de retorno es 0 (cero).


Por ejemplo si tenemos una página que realiza consultas de contenido de una tabla por medio de un id: http://mi_sitio.com/consulta.php?id=1, al utilizar la función de php intval($_GET['id']) nos aseguramos que el parámetro de entrada, sean únicamente enteros.


$sql = "SELECT contenido FROM tabla WHERE id = ".$_GET['id'];


si la url fuese: consulta.php?id=1 el resultado es: 

SELECT contenido FROM tabla WHERE id = 1.


lo cual genera una consulta exitosa, pero si la url fuese: consulta.php?id=texto el resultado es:

SELECT contenido FROM tabla WHERE id = texto


Lo cual nos marcaría un error en la consulta SQL. Al incluir intval() el resultado es el siguiente:

$sql = "SELECT contenido FROM tabla WHERE id = ".intval($_GET['id']);

SELECT contenido FROM tabla WHERE id = 0

Lo cual no generaría ningún resultado en la consulta.


mysql_real_escape_string() - seguridad:  escapa todos los caracteres especiales en la cadena de tal modo que sea seguro usarla con mysql_query(), el cual evita ser atacado por Inyección SQL o SQLInjection, explico mas detallado esto en: Seguridad en php: Inyección SQL.


md5() - seguridad:  función que sirve para encriptar  cadena de caracteres, devuelve un valor con 32 caracteres. Por ejemplo: md5("1qawedty"); y el resultado de esto sería algo así: 88dfeaceb52a789342f4c1faf9134207. 


Esta función nos ayudará a encriptar textos como son contraseñas para el acceso de usuarios. Esto se realizaría de la siguiente forma:


El usuario registra un nickname y una contraseña,  recibimos estos valores, encriptamos la contraseña con la función md5() y almacenamos el nickname y la contraseña encriptada.


Cuando el usuario quiera ingresar a su cuenta, solo debe escribir su nickname y su contraseña, recibimos los valores, encriptamos la contraseña y realizamos la consulta SQL donde el nickname y la contraseña encriptada sean iguales a un registro en la tabla.


htmlspecialchars() - seguridad: esta función es útil para evitar que los usuarios ingresen caracteres html al guardar información desde un formulario.


Lo que hace esta función es traducir los caracteres que son especiales en HTML en caracteres que son interpretados por el explorador como tal. Estos caracterés son: &, ", ', <, >. Si se desea traducir todas los caracteres que tengan una equivalencia en html se debe usar la siguiente función: htmlentities();


continua leyendo: Seguridad en php: validación y filtro (POST, GET) - parte 2

No hay comentarios: