1 Followers
26 Following
shortsice9

shortsice9

SPOILER ALERT!

Seguridad de Sitios Web

La Seguridad web require vigilancia en todos y cada uno de los aspectos del diseño y uso de un sitio. Este artículo propedéutico no te hará un gurú de la seguridad en sitios, mas te ayudará a entender de donde vienen las amenazas y qué puedes hacer para fortalecer tu aplicación web contra los ataques más comunes.


¿Qué es la seguridad de sitios?


¡Internet es un lugar peligroso! presupuesto seo galicia mucha frecuencia escuchamos sobre sitios web que dejan de estar libres debido a ataques de denegación de servicio, o presentan información modificada (y con cierta frecuencia dañada) en sus páginas de comienzo. 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, empleo, modificación, destrucción o interrupción, no autorizados.


La seguridad de sitios web eficaz precisa 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 tiempo que todo esto suena muy inquietante, la buena nueva es que si estás utilizando un framework web de lado servidor, es prácticamente seguro que habilitará por defecto mecanismos de defensa robustos y bien pensados contra gran cantidad de los ataques más comunes. Otros ataques pueden atenuarse por medio de la configuración de tu servidor web, por poner un ejemplo habilitando HTTPS. Por último, hay herramientas de escaneado de vulnerabilidades disponibles públicamente que pueden ayudarte a descubrir si has cometido algún error obvio.


El resto de este artículo proporciona más detalle sobre unas pocas amenazas comunes y algunos de los pasos simples que puedes dar para proterger tu lugar.



Nota: Este es un tema de introducción, diseñado para asistirte a pensar sobre la seguridad de sitios. No pretende ser pormenorizado.


Amenazas contra la seguridad de sitios web


Esta sección lista sólo ciertas pocas de las amenazas más comunes para los sitios web y cómo son 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!


Cross-Site Scripting (XSS)


XSS es un término que se usa para describir una clase de ataques que dejan al atacante inyectar scripts de lado usuario,
a travésdel sitio web, hasta los exploradores de otros usuarios. Como el código inyectado va del servidor del sitio 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. Cuando el atacante tiene la cookie pueden empezar sesión en el sitio como si fuera el auténtico usuario y hacer cualquier cosa que pueda hacer éste. Dependiendo 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 2 aproximaciones primordiales para lograr que el sitio devuelva scripts inyectados al explorador — se conocen como vulnerabilidades XSS
reflejadasy
persistentes.


  • Una vulnerabilidad XSS
    reflejadaocurre cuando contenido del usuario que se pasa al servidor se devuelve
    inmediatamente y sin modificarpar que los muestre el explorador — ¡cualquier script en el contenido original del usuario se ejecutará cuando se cargue una nueva página!

    Por ejemplo, considera una función de búsqueda en un lugar donde los términos de búsqueda están codificados como parámetros URL y estos términos se presentan junto con los resultados. Un atacante puede edificar un enlace de búsqueda que contenga un script malicioso como parámetro (ej.
    ?q=beer<script por cien 20src="/tricky.js"></script>) y mandarlo 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 necesita para entrar en el lugar tal y como si fuera el usuario receptor — realizando compras potencialmente como si fuera el usuario o bien compartiendo su información de contactos.
  • Una vulnerabilidad
    XSS persistentees aquella en la que el script malicioso se
    almacenaen el sitio y después más tarde se vuelve a presentar en pantalla sin modificar para que otros usuarios lo ejecuten de forma involuntaria. Por servirnos de un ejemplo, un foro de discusión que accepta comentarios que contengan HTML sin alterar, podría almacenar un script malicioso de un atacante. Cuando se muestren los comentarios se ejecutará el script y enviará al atacante la información requerida para acceder a la cuenta del usuario. Esta clase de ataque es exageradamente popular y muy potente, porque el atacante no debe tener ninguna relación directa con las víctimas.

    Si bien los datos
    POSTo
    GETson las fuentes más comunes de vulnerabilidades, cualquier dato del explorador es vulnerable potencialmente (incluyendo los datos de cookies renderizados por el explorador, o bien los archivos de los usuarios que éste sube o bien que se muestran).



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 ficheros de los usuarios que éste sube o bien que se muestran).


La mejor defensa contra las vulnerabilidades XSS es quitar o bien 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 modificar los datos del usuario de forma que no puedan usarse para ejecutar scripts o bien 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.


Inyección SQL


Las vulnerabilidades de Inyección SQL habilitan que usuarios maliciosos ejecuten código SQL arbitrario en una base de datos, dejando que se pueda acceder a los datos, se puedan alterar 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 mudar el significado de exactamente la misma. Por poner 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 cambiar completamente el comportamiento de esta sentencia SQL a la nueva sentencia de abajo, sencillamente 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 y cada uno de los usuarios). Esto funciona por que la primera parte del texto inyectado (
a';) completa la sentencia original (' es el símbolo para indicar una cadena textual en SQL).


La forma de eludir esta clase de ataque es asegurar que cualquier dato de usuario que se pasa a un query SQL no puede mudar la naturaleza del mismo. Una forma de hacer ésto estodos los caracteres en la entrada de usuario que tengan un significado singular 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 muy raro desde luego, mas 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 sustenta aquí en la información de.


diseño landing page sevilla (CSRF)


Los ataques de CSRF permiten que un usuario malicioso ejecute acciones usando las credenciales de otro usuario sin el conocimiento o permiso de éste.


Este género de ataque se explica mejor con un ejemplo. John es un usuario malicioso que sabe que un lugar particularmente permite a los usuarios que han comenzado 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 edifica 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 link a un sitio "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 que el explorador asocia con el sitio(añadir cookies asociados con el sitio 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 lugar 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 solicitudes al servidor asociado.


Una forma de prevenir esta clase de ataque por la parte del servidor es requerir que la petción
POSTincluya una palabra secreta específica del usuario generada por el sitio (la palabra secreta podría darla 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, pues 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 semejantes mecanismos de prevención de CSRF.


Otras amenazas


Otros ataques/vulnerabilidades incluyen:


  • . En este tipo de ataque, el usuario malicioso rapta las pulsaciones de ratón dirigidas a un lugar visible por encima de los demás y las redirige a una página oculta por debajo. Esta técnica se usaría, por servirnos de un ejemplo, para presentar un sitio bancario legítimo pero apresar las credenciales de inicio de sesión en uninvisible controlado por el atacante. Alternativamente podría usarse para lograr que el usuario pinchase sobre un botón en un lugar perceptible, mas al hacerlo realmente estuviese sin advertirlo pinchando en otro botón totalmente diferente. Como defensa, tu sitio puede resguardarse de ser embebido en un iframe de otro lugar configurando las cabeceras HTTP adecuadamente.
  • , DoS). DoS se logra en general inundando el sitio objetivo con peticiones espúreas de forma que se interrumpa el acceso a los usuarios legítimos. Las solicitudes pueden simplemente ser numerosas, o consumir individualmente gran cantidad de recursos (ej. lecturas lentas, subidas de grandes archivos, etc.) Las defensas contra DoS por norma general trabajan mediante la indentificación y el bloqueo de tráfico "malo" dejando no obstante que atraviesen los mensajes legítimos. Estas defensas se hallan típicamente dentro o bien ya antes del servidor (no son una parte de la aplicación web misma).
  • /Revelación de Archivos. En este tipo de ataque un usuario malicioso intenta acceder a unas partes del sistema de archivos del servidor web a los que no debería tener acceso. Esta vulnerabilidad ocurre cuando el usuario es capaz de pasar nombres de archivo que incluyen caracteres del sistema de navegación (ej.
    ../../). La solución es desinficionar la entrada ya antes de usarla.
  • . En este ataque un usuario es capaz de especificar, para mostrar o bien ejecutar, un fichero "no intencionado para ello" en los datos que le pasa al servidor. Una vez ha sido cargado este fichero podría ejecutarse en el servidor web o en el lado cliente (llevando a un ataque XSS). La solución es desinfectar la entrada ya antes de emplearla.
  • . Los ataques de inyección de comandos permiten a un usuario malicioso ejecutar comandos del sistema arbitrarios en el sistema operativo del host. La solución es desinfectar la entrada de usuario antes que pueda ser usada en llamadas al sistema.

Hay muchas más. Para un lisado completo ver(Wikipedia) y(Open Web Application Security Project).


Unos cuantos mensajes clave


Casi todos los exploits de las secciones precedentes tienen éxito cuando la aplicación web confía en los datos que vienen del explorador. Sea lo que sea que hagas para prosperar la seguridad de tu sitio, deberías desinficionar todos los datos producidos por el usuario ya antes de ser mostrados en el explorador, utilizados en queries SQL o bien pasados en una llamada al sistema operativo o 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, archivos subidos por los usuarios, etcétera Comprueba siempre y en todo momento y desinfecta todos los datos entrantes. Siempre y en todo momento acepta lo peor.


Otras cuantas medidas concretas que puedes tomar son:


  • Usar una gestión de contraseñas más eficaz. Fomentar las contraseñas fuertes y que se cambien con regularidad. Considerar para tu sitio la autenticación de dos factores, de forma que, además de la contraseña, el usuario tenga que introducir algún otro código de autenticación (por norma general alguno que se distribuye a través de algún hardware que sólo tiene el usuario, como un código en un mensaje de texto mandado a su teléfono móvil).
  • Configurar tu servidor web para usary(HSTS). HTTPS encripta los datos enviados entre el cliente y el servidor. Esto asegura que las credenciales de incio de sesión, cookies, datos
    POSTe información de cabecera permanecen menos libres a los atacantes.
  • Seguir la pista a las amenazas más populares () y agredir las vulnerabilidades más comunes primero.
  • Usar herramientas depara realizar pruebas automáticas de seguridad en tu sitio (más adelante, si tu sitio web llega a ser super triunfante puedes también localizar bugs por medio de ofrecer recompensas por encontrar bugs).
  • Almacena y muestra sólo los datos que precisen serlo. Por ejemplo, si tus usuarios deben guardar información sensible como los detalles de las tarjetas de crédito, sólo muestra lo bastante del número de tarjeta de manera que pueda ser identificada por el usuario, y no suficiente para que pueda ser copiado por el atacante y utilizado en otro lugar. El patrón más común hoy en día es mostrar sólo los 4 últimos dígitos del número de la tarjeta de crédito.

Los frameworks web pueden asistir a mitigar muchas de las vulnerabilidades más comunes.


Sumario


Este artículo ha explicado el término de seguridad en sitios web y ciertas amanazas más comunes contra las que tu sitio debería empezar a resguardarse. 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 y cada uno de los datos de usuario deberían ser desinfectados ya antes de ser mostrados, o bien usados en queries SQL o bien llamadas a ficheros de sistema.


Hemos llegado al final de, tratando tus primeros pasos en la programación de lado servidor de un sitio. Esperamos que hayas disfrutado del aprendizaje de los conceptos fundamentales y estés listo para seleccionar un framework web y empezar a programar.


En este módulo