Todos conocemos que la gran fracción de las vulnerabilidades en las aplicaciones, vienen dadas por malas prácticas de programación y que incluir requisitos de seguridad en el ciclo de vida de las aplicaciones debe ser una práctica general si deseamos evitarnos futuros dificultades de seguridad cuyo arreglo será mucho más costoso. Las vulnerabilidades más usuales cambian en función del tipo de aplicación, pero habitualmente solemos encontrarnos los siguientes: Derivados del tratamiento de la entrada: ausencia o yerros en la implementación del filtrado de carácteres potencialmente peligrosos pueden llegar a la ejecución de código. Derivados de la implementación errónea de la salida: pueden proporcionar un sobrante de información al usuario sobre el sistema o aplicación. Derivados del yerros de codificación: yerros en la implementación de la lógica de la aplicación. Derivados de yerros de diseño: disponibilidad de funciones innecesarias pueden proporcionar excesivos privilegios al usuario. Nosotros nos vamos a centrar en el filtrado de caracteres tanto en la acceso como en la salida de la aplicación, señalando para los tres lenguajes de programación PHP, JAVA y ASP, las funciones más comunes para eludir vulnerabilidades de este tipo. Lo ideal sería verificar el input y el output de las cadenas. Para verificar la acceso se recomienda hacer una serie de controles: verificar la codificación de caracteres, que éstos únicamente contengan los carácteres permitido, que el tipo de dato y la extensión sean correctas y que el formato sea el adecuado. Lo ideal sería que asimismo de filtrar los caracteres potencialmente peligrosos (como por ej. ? y >) con funciones específicas, también se tenga el cuenta el tipo de dato que se está tratando, realizando así lo que se llama un filtrado semántico. De esta forma por ejemplo, si una variable que se ofrece desde la acceso del usuario la casteamos a tipo entero antes de incluirla en una consulta SQL, conocemos que obligatoriamente ésta no incluirá caracteres que no sean numéricos. A continuación se enumeran una serie de funciones del propio PHP 5 que pueden ser utilizadas para el filtrado de caracteres. Funciones de filtrado (I): PHP string htmlentities (): mediante esta función se codifican los carácteres en entidades html, de esta forma evitamos que se impriman caracteres en el código html que el navegador pueda interpretar. Además de especificar la variable, el parámetro flag especifica qué realizar con las comillas y el charset el mapa de caracteres a utilizar. Esta función se suele utilizar para eludir vulnerabilidades de tipo Cross-site Scriptting. mysql_real_escape_string(): para hacer consultas SQL seguras, el uso de esta función está altamente recomendado ya que antepone backslashes a los caracteres: \x00, \n, \r, \, ', " y \x1a . Nota que para el uso de esta función, es indispensable una conexión MySQL. Esta función se suele utilizar para eludir vulnerabilidades de tipo SQL Injection. string escapeshellarg (): cuando se labora con argumentos que se incluirán en comandos del sistema operativo, es conveniente utilizar esta función para fugar las probables comillas incluidas. Se recomienda utilizar esta función para eludir vulnerabilidades de tipo Command Injection. string urlencode (): si lo que pretendemos es generar url?s, es conveniente utilizar esta función para transformar al formato %hex y junto con htmlentities() para que no haya dificultades con el ampersand. Además, PHP también implementa otra función de filtrado con multitud de opciones: filter_var()