La Seguridad web require vigilancia en todos los aspectos del diseño y empleo de un sitio web. Este artículo introductorio no te hará un gurú de la seguridad en sitios web, mas te ayudará a comprender de donde vienen las amenazas y qué puedes hacer para robustecer tu aplicación web contra los ataques más comunes.
¡Internet es un lugar peligroso! Con mucha frecuencia escuchamos sobre sitios web que dejan de estar disponibles debido a ataques de denegación de servicio, o bien presentan información modificada (y habitualmente dañada) en sus páginas de inicio. En otros casos de alto nivel, millones de contraseñas, direcciones de correo electrónico y detalles de tarjetas de crédito han sido filtrados al dominio público, exponiendo a los usuarios del sitio web tanto a bochorno personal como a peligro finaciero.
El propóisto de la seguridad web es prevenir ataques de esta (o bien de cualquier otra) clase. Pero formalmente,
la seguridad es la acción/práctica de resguardar sitios web del acceso, uso, modificación, destrucción o bien interrupción, no autorizados.
La seguridad de sitios web eficaz requiere de sacrificios de diseño a lo largo de la totalidad del sitio web: en tu aplicación web, en la configuración del servidor web, en tus políticas para crear y renovar contraseñas, y en el código del lado usuario. Al mismo tiempo que todo esto suena muy inquietante, la buena nueva es que si estás utilizando un framework web de lado servidor, es casi seguro que habilitará por defecto mecanismos de defensa robustos y bien pensados contra gran cantidad de los ataques más comunes. Otros ataques pueden mitigarse por medio de la configuración de tu servidor web, por ejemplo habilitando HTTPS. Por último, hay herramientas de escaneado de vulnerabilidades libres públicamente que pueden ayudarte a descubrir si has cometido algún error obvio.
El resto de este artículo da más detalle sobre unas pocas amenazas comunes y algunos de los pasos simples que puedes dar para proterger tu sitio.
Nota: Este es un tema de introducción, diseñado para asistirte a meditar sobre la seguridad de sitios. No pretende ser pormenorizado.
Esta sección lista sólo ciertas pocas de las amenazas más comunes para los sitios web y cómo diseño pagina web comercios mitigadas. A medida que vayas leyendo, fíjate cómo las amenazas tienen éxito cuando la aplicación web, ¡o confía o bien
no es suficientemente paranoicaacerca de los datos que vienen del explorador web!
XSS es un término que se utiliza para describir una clase de ataques que dejan al atacante inyectar scripts de lado cliente del servicio,
a travésdel sitio, hasta los exploradores de otros usuarios. Como el código inyectado va del servidor del lugar al explorador, se supone de confianza, y de aquí que pueda hacer cosas como mandar al atacante la cookie de autorización al sitio del usuario. En el momento en que el atacante tiene la cookie pueden comenzar sesión en el lugar como si fuera el auténtico usuario y hacer cualquier cosa que pueda hacer éste. En dependencia de que lugar sea, esto podría incluir acceso a los detalles de su tarjeta de crédito, ver detalles de contactos o mudar contraseñas, etc.
Nota: Las vulnerabilidades XSS han sido históricamente más comunes que las de cualquier otro tipo.
Hay dos aproximaciones primordiales para lograr que el lugar devuelva scripts inyectados al explorador — se conocen como vulnerabilidades XSS
reflejadasy
persistentes.
?q=beer<script por ciento 20src="/tricky.js"></script>) y enviarlo como enlace en un correo electrónico a otro usuario: Si el receptor pincha en este "enlace interesante", el script se ejecutará cuando se muestren en pantalla los resultados de la búsqueda. Como discutimos arriba, ésto da al atacante toda la información que precisa para entrar en el lugar como si fuera el usuario destinatario — realizando compras potencialmente tal y como si fuera el usuario o compartiendo su información de contactos.Si bien los datos
POSTo
GETson las fuentes más comunes de vulnerabilidades, cualquier dato del explorador es frágil potencialmente (incluyendo los datos de cookies renderizados por el explorador, o bien los archivos de los usuarios que éste sube o que se muestran).
Si bien los datos
POSTo
GETson las fuentes más comunes de optimizar web para movil , cualquier dato del explorador es frágil potencialmente (incluyendo los datos de cookies renderizados por el explorador, o los ficheros de los usuarios que éste sube o que se muestran).
La mejor defensa contra las vulnerabilidades XSS es eliminar o deshabilitar cualquier etiqueta que pueda contener instrucciones para ejecutar código. En el caso del HTML ésto incluye etiquetas como
<script>,
<object>,
<embed>, y
<link>.
El proceso de alterar los datos del usuario de forma que no puedan emplearse para ejecutar scripts o que afecten de otra forma la ejecución del código del servidor, se conoce como "desinfección de entrada" (input sanitization). Muchos frameworks web desinficionan automáticamente la entrada del usuario desde formularios HTML, por defecto.
Las vulnerabilidades de Inyección SQL habilitan que usuarios maliciosos ejecuten código SQL arbitrario en una base de datos, permitiendo que se pueda acceder a los datos, se puedan modificar o bien borrar, con independencia de los permisos del usuario. Un ataque de inyección con éxito, podría falsificar identidades, crear nuevas identidades con derechos de administración, acceder a todos los datos en el servidor o bien destruir/modificar los datos para hacerlos inservibles.
Esta vulnerabilidad está presente si la entrada del usuario que se pasa a la sentencia SQL latente puede cambiar el significado de exactamente la misma. Por servirnos de un ejemplo, considera el código de abajo, que pretende listar todos los usuarios con un nombre en particular (
userName) que ha sido suministrado en un formulario HTML:
Si el usuario introduce su nombre real, la cosa funciona como se pretende. No obstante un usuario malicioso podría mudar totalmente el comportamiento de esta sentencia SQL a la nueva sentencia de abajo, simplemente especificando para
userNameel texto de abajo en "
negrilla". La sentencia cambiada crea una sentencia SQL válida que borra la tabla
usersy selecciona todos los datos de la tabla
userinfo(revelando la información de todos los usuarios). Esto funciona por que la primera una parte del texto inyectado (
a';) completa la sentencia original (' es el símbolo para indicar una cadena textual en SQL).
La manera de evitar esta clase de ataque es asegurar que cualquier dato de usuario que se pasa a un query SQL no puede cambiar la naturaleza del mismo. Una forma de hacer ésto estodos los caracteres en la entrada de usuario que tengan un significado especial en SQL.
Nota: La sentencia SQL trata el caracer ' como el principio y el final de una cadena de texto. Poniendo el caracter barra invertida delante, "eludimos" el símbolo ('), y le afirmamos a SQL que lo trate como un carácter de texto (como una parte de exactamente la misma cadena).
En la sentencia de abajo evitamos el carácter '. SQL interpretará ahora como "nombre" la cadena de texto completa mostrada en negrilla (!un nombre rarísimo desde luego, pero no dañino¡)
Los frameworks web habitualmente tienen cuidado de hacer por tí la elusión de caracteres. Django, por poner un ejemplo se asegura que cualquier dato de usuario que se pasa a los conjuntos de queries (modelo de queries) está corregido.
Nota: Esta sección se sosten aquí en la información de.
Los ataques de CSRF permiten que un usuario malicioso ejecute acciones utilizando las credenciales de otro usuario sin el conocimiento o bien permiso de éste.
Este tipo de ataque se explica mejor con un caso. John es un usuario malicioso que sabe que un sitio en particular deja a los usuarios que han iniciado sesión enviar dinero a una cuenta específica utilizando una petición HTTP
POSTque incluye el nombre de la cuenta y una cantidad de dinero. John construye un formulario que incluye los detalles de su banco y una cantidad de dinero como campos ocultos, y lo envía por correo electrónico a otros usuarios del lugar (con el botón de
Enviarcamuflado como enlace a un lugar "hazte rico rápidamente").
Si el usuario pincha el botón de mandar, se envía al servidor una petición HTTP
POSTque contiene los detalles de la transacción y
todos los cookies de lado-cliente del servicio que el explorador asocia con el sitio(añadir cookies asociados con el lugar es un comportamiento normal de los exploradores). El servidor comprobará los cookies, y los usará para determinar si el usuario ha comenzado sesión o bien no y si tiene permiso para hacer la transacción.
El resultado es que cualquier usuario que pinche en el botón
Enviarmientras tiene la sesión iniciada en el sitio comercial hará la transacción. ¡John se hará rico!
Nota: El truco aquí es que John no precisa tener acceso a los cookies del usuario (o acceso a sus credenciales) — El explorador del usuario almacena esta información, y la incluye automáticamente en todas y cada una de las peticiones al servidor asociado.
Una forma de prevenir este tipo de ataque por la parte del servidor es requerir que la petción
POSTincluya una palabra secreta específica del usuario generada por el lugar (la palabra segrega podría proporcionarla el servidor cuando envía el formulario web que se usa para hacer trasferencias). Esta aproximación evita que John pueda crear su propio formulario, por el hecho de que necesitaría conocer la palabra segrega que el servidor ha proporcionado para el usuario. Aun si conociera esta palabra y creara un formulario para un usuario particularmente, no podría usar el mismo formulario para agredir a todos los usuarios.
Los frameworks web incluyen habitualmente tales mecanismos de prevención de CSRF.
Otros ataques/vulnerabilidades incluyen:
../../). La solución es desinficionar la entrada ya antes de usarla.Hay muchas más. Para un lisado completo ver(Wikipedia) y(Open Web Application Security Project).
Casi todos y cada uno de los exploits de las secciones anteriores tienen éxito cuando la aplicación web confía en los datos que vienen del explorador. Sea lo que sea hagas para mejorar la seguridad de tu sitio web, deberías desinficionar todos y cada uno de los datos producidos por el usuario antes de ser mostrados en el explorador, usados en queries SQL o bien pasados en una llamada al sistema operativo o bien archivo de sistema.
Importante: La lección más importante que debes aprender acerca de la seguridad de sitios web es
nunca confíes en los datos del explorador web. Esto incluye los datos en parámetros URL de las peticiones
GET, datos
POST, cabeceras HTTP y cookies, ficheros subidos por los usuarios, etc. Verifica siempre y en toda circunstancia y desinfecta todos y cada uno de los datos entrantes. Siempre y en todo momento asume lo peor.
Otras cuantas medidas concretas que puedes tomar son:
POSTe información de cabecera permanecen menos disponibles a los atacantes.Los frameworks web pueden asistir a atenuar muchas de las vulnerabilidades más comunes.
Este artículo ha explicado el concepto de seguridad en sitios web y ciertas amanazas más comunes contra las que tu lugar debería empezar a protegerse. Lo más esencial que deberías entender es que ¡una aplicación web no puede confiar en ningún dato que provenga de explorador web! Todos los datos de usuario deberían ser desinficionados ya antes de ser mostrados, o bien usados en queries SQL o llamadas a ficheros de sistema.
Hemos llegado al final de, tratando tus primeros pasos en la programación de lado servidor de un sitio web. Esperamos que hayas disfrutado del aprendizaje de los conceptos esenciales y estés listo para seleccionar un framework web y empezar a programar.