miércoles, 25 de junio de 2014

La importancia de validar los datos

Hace un par de años cuando empece a programar de verdad , dejando de lado HTML y entrando en los lenguajes de verdad como PHP y SQL , un viejo amigo me dijo lo siguiente  Ahiezer un Input sin validar
es una nueva vulnerabilidad  en ese momento pensé que estaba exagerando pero un poco después la tiempo la experiencia me enseño que no solo debía validar los inputs si no todo dato que tomaban en mi sitio web como la dirección Ip , Sistema Operativo , Navegador , etc , para evitar inyecciones de código  o otro tipo de ataque.
Sin embargo no todos los desarrolladores  tienen las mismas consideraciones que yo y muchas veces olvidan validar los datos en especial los principiantes y después el trabajo final es vulnerable a XSS , SQLI , PHPI , etc y ademas  se pude Provocar errores para obtener información , tambien existen otros desarrolladores que solo limitan su proteccion a no mostrar los errores colocando un error_reporting(0) en PHP o un error On error resume Next en ASP como si eso fuera suficiente para evitar encontrar un sqli.
Tambien he visto que algunos desarrolladores realizan unas validaciones poco funcionales como por ejemplo lo siguiente

<?php
$consulta = $_POST['consulta'];
$consulta = addslashes($_POST['consulta']);
?>


Aparentemente este codigo funciona perfectamente ya que todos las consulta que lleven ' las transforma en /' , pero que pasa si el atacante usa la tecnica de SQLI BLIND agregando al final AND 1=1 , tambien podriamos usar codigos ASCII nemericos que ser trasnformar en texto por ejemplo ASCII(39) que equivale a ' , tambien existe un proteccion para SQLI BLIND la pueden encontrar aqui http://www.elladodelmal.com/2007/07/proteccin-contra-las-tcnicas-de-blind.html , tambien debo decirles que una protección mal implementara equivale a un vulnerabilidad extra pero eso lo explicare en otra entrada.
Obviamente existen otros tipos de protecciones , pero tambien otras formas de Bypassear como dice el dicho Hecha la Ley hecha la trampa.
 Tambien debo decirles que una SQLI no solo se encuentra en una buscada sino en todo proceso donde se reciba un dato del cliente que va hacer usado en una operacion con SQL por ejemplo agregar un nuevo usuario a la base de datos o modificar los datos de un usuario.

Me despido y espero que esta entrada les haya agradado me hubiese gustado poner uno de los muchos ejemplos que he encontrado pero me falta tiempo hasta luego y Siempre recuerden que Todo es tan dificil antes de ser sencillo.