Professional Documents
Culture Documents
Aplicaciones Web
Introduccion a la seguridad en sistemas web
En la actualidad el crecimiento de internet ha impactado directamente en la seguridad de la
informacin manejada cotidianamente. Sitios de comercio electrnico, servicios, bancos e
incluso redes sociales contienen informacin sensible que en la mayora de los casos resulta
ser muy importante.
Se puede decir que uno de los puntos ms crticos de la seguridad en Internet son las
herramientas que interactan de forma directa con los usuarios, en este caso los servidores
web. Es comn escuchar sobre fallas en los sistemas de proteccin de los servidores ms
frecuentemente utilizados, por ejemplo Apache, NGINX, IIS, etc. (Build With, 2016) O en los
lenguajes de programacin en que son escritas las aplicaciones. Sin embargo, la mayora de
los problemas detectados en servicios web no son provocados por fallas de ninguna de estas
partes, si no que los problemas se generan por malas prcticas de parte de los
programadores.
Debemos entender que programar aplicaciones web seguras no es una tarea fcil, ya que
requiere por parte del programador, no slo cumplir con el objetivo funcional bsico de la
aplicacin, sino una concepcin general de los riesgos que puede correr la informacin
procesada por el sistema.
1. Problemas principales en la programacin de sistemas web
Gran parte de los problemas de seguridad en las aplicaciones web son causados por la falta
de seguimiento en dos rubros muy importantes de los que depende cualquier aplicacin, las
entradas y salidas del sistema. Ver Ilustracin 1.
entender el cdigo que estn observando y por lo tanto implementan medidas de validacin
en entradas, variables, entre otros, sin entender exactamente el funcionamiento de la
solucin empleada.
Es importante notar que en los lenguajes de programacin existen una buena cantidad de
filtros pero evidentemente estos no llegan a cubrir todas las necesidades que puede tener
un desarrollador. En este caso, se llegan a utilizar funciones creadas y adaptadas a nuestras
necesidades a modo de filtro especial, en la mayora de estos casos es donde se puede
encontrar el uso de expresiones regulares.
En la Ilustracin 3 tenemos un ejemplo en PHP de variables GET sanitizadas mediante una
funcin la cual valida que nicamente sean nmeros enteros (FILTER_SANITAZE_NUMBER_INT)
y no contengan etiquetas HTML (strip_tags).
Una vez concluido el paso del filtrado solo resta usar convenciones apropiadas en el
nombramiento de las variables para poder distinguir las que ya han sido filtradas.
2.4 Escapado de salidas
Otro punto importante de la seguridad es el proceso de escapado y su contraparte para
codificar o decodificar caracteres especiales de tal forma que su significado original sea
preservado. Si llegamos a utilizar una codificacin en particular es necesario conocer los
caracteres reservados los cuales sern necesarios escapar.
El proceso de escapado debe estar compuesto a su vez por los siguientes pasos:
Para distinguir entre los datos que han sido escapados de los que no, es recomendable
tambin usar una convencin de nombres. Es necesario una funcin de escapado para cada
caso, como ejemplo en PHP se tomaran las siguientes consideraciones para:
?
Ilustracin 9. Descripcin bsica de SQL Injection.
Ninguno de estos pasos cruciales debe ser omitido, y los dos pasos requieren especial
atencin para poder minimizar los errores. Afortunadamente los ataques de SQL Injection son
fcilmente evitables, mientras filtremos y escapemos las salidas.
4.3 Exposicin de datos
Una de las preocupaciones ms comunes relacionadas con las bases de datos es la exposicin
de datos sensibles. Al almacenar nmeros de tarjetas de crdito, por ejemplo, es preferible
asegurarse que los datos almacenados en la base de datos se encuentran seguros e
inaccesibles incluso para los administradores de la base.
Para asegurar que no se almacenan datos como texto en claro en la base de datos, se pueden
realizar procedimientos de hash a las cadenas almacenadas para que no sea entendible la
informacin a simple vista. Se debe considerar el costo de esta implementacin ya que
habra que obtener el hash al insertarlo y al extraerlo realizar la operacin inversa, lo que
conllevara a que la aplicacin tarde un poco ms en responder.
5. Pginas privadas y los sistemas de autenticacin
La autenticacin consiste en verificar la identidad de un usuario. Comnmente el
procedimiento involucra un nombre de usuario y una contrasea a revisar. Muchas
aplicaciones tienen recursos que son accesibles slo para los usuarios autenticados, as como
recursos totalmente pblicos.
5.1 Ataques de fuerza bruta
Este tipo de ataque es un mtodo de ensayo y error utilizado para obtener informacin de
una contrasea, clave o nmero de identificacin personal, entre otros. Funciona mediante
variable de sesin establecida que no se considera como expirado jams o que no cambia en
cada nuevo registro establecido por el usuario.
Las cookies permanentes y variables de sesin ayudan a los sitios web a recordar tu
informacin y ajustes cuando los visitas ms adelante. Esto conlleva un acceso ms rpido y
sencillo ya que, por ejemplo, no tienes que iniciar sesin de nuevo.
6. Conclusiones
La seguridad en aplicaciones Web involucra principalmente al desarrollador, aunque con gran
frecuencia se encuentran defectos que pueden ser aprovechados por atacantes en las
tecnologas en que se basan los sistemas web (Sistemas Operativos, Servidores Web, Servidor
de Base de Datos, etc.) la atencin principal debe dirigirse a los defectos propios al
desarrollo nuestras aplicaciones.
Todo programador debe estar consciente que el manejo de las peticiones, para aceptarlas o
rechazarlas, deben estar los datos o variables recibidas no cumplan con las caractersticas
esperadas o predefinidas. Todas las entradas del sistema deben pasar por el filtrado de los
datos contenidos para confirmar su usabilidad. Adems para el programador debe ser claro y
fcil de identificar cuando una variable ya ha sido sometida al proceso de limpieza, de esta
forma evitaremos tener que confiar en la memorizacin o tener que hacer un mapa de los
procesos ejecutados por cada lnea de cdigo ejecutada de manera previa.
Otro aspecto importante a considerar son los procesos de salida de la informacin del
sistema. Es importante siempre considerar el significado que pueda tener la informacin
enviada en su nuevo contexto, y en el caso de poder crear problemas de interpretacin de
las salidas, escaparlas para preservarlas. Al igual que en el proceso de filtrado, es
importante mantener un control sobre la codificacin que tienen los datos antes de enviarlos
a su nuevo contexto.
Para mayor informacin y como solucionar los problemas antes mencionados les
recomendamos seguir las Sugerencias de Seguridad para Sitios Web (Aguilar & Hernndez,
2014)
7. Referencias
Aguilar, A. & Hernndez, A. (25 de Abril de 2014). Obtenido de Sugerencias de
Seguridad para Sitios Web: http://www.seguridad.unam.mx/documento/?id=1143
Built With. (26 de Enero de 2016). Web Server Usage Statistics. Obtenido de
http://trends.builtwith.com/Web-Server
http://www.seguridad.unam.mx/documento/?id=17