comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Previniendo ataques XSS

  • 2 Respuestas
  • 2491 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    16.67%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Diciembre 26, 2013, 03:24:40 pm »

¿De qué va este post?

En este post explicaré cómo prevenir los ataques de Cross Site Scripting (o XSS)
de forma muy sencilla, pero efectiva.

¿Por qué?

Porque, tras realizar una auditoría de seguridad sobre un entorno web, y recomendar a los desarrolladores que implementen un filtrado correcto nos hemos dado cuenta que:

    Muchos no saben cómo hacerlo correctamente.
    Implementan filtros que no son los correctos y se pueden seguir eludiendo.
    Piensan que la implementación de esos filtros es muy compleja, cuando no es así.

¿Cuál es el problema?

No voy a explicar en qué consiste un ataque XSS (google contestará a esta pregunta sobradamente) pero es bien conocido el perjuicio tan grave que supone para los usuarios.

El problema radica en unas malas prácticas a la hora de desarrollar un sitio web y no se filtra correctamente toda la información que se va a mostrar al usuario.

Se pueden diferenciar 2 planteamientos:

1 – Cuando se utiliza un framework de programación (spring, struts, ASP.net, symfony, cakePHP, Django…), que hace más complicado ser vulnerable a este tipo de ataques, salvo aquellos casos en los que se utiliza o configura correctamente el framework utilizado. La mayoría permiten configurar de forma muy rigurosa los tipos de datos de entrada y éstos se encargan de filtrar posibles ataques. Pero no todos los desarrolladores conocen el poder de éstos y desaprovechan su potencial.

2 – Cuando se desarrolla desde cero, estos filtros tienen que ser creados manualmente y tener mucho cuidado con todos los valores de entrada. En la práctica no se suele hacer bien por desconocimiento de la vulnerabilidad o bien por no saber cómo hacerlo.

El problema se complica más aun cuando es necesario permitir al usuario introducir etiquetas HTML, como pueden ser los comentarios de un foro.

¿Qué tipos de filtros existen?

Podemos implementar un sistema de filtrado sencillo en función de las necesidades que tengamos:

    Todo lo que introduce el usuario ha de ser filtrado. No permitimos ningún carácter extraño.
    Debemos permitir al usuario que introduzca valores HTML simples como: negrita (), cursiva (), salto de línea (
    )…
    Debemos permitir al usuario que introduzca valores HTML que aceptan complejos: enlaces (…), modificación del tipo de letra ()

Implementando filtrado simple

Vamos a implementar un sistema de filtrado atendiendo a los supuestos 1 y 2 del apartado anterior. Lo primero que debemos de tener en la cabeza es que jamás podemos fiarnos de un usuario y lo que éste está dispuesto a hacer. Por esta razón debemos de ponernos siempre en el peor de los casos, aunque parezca algo paranoico.

Como regla general a aplicar deberíamos de seguir la política: denegar todo y permitir solamente aquellos casos concretos que necesitemos. Vamos a la práctica:
Caso 1: Filtrando todo el contenido de salida

Siempre que necesitemos mostrar en el navegador información no estática, variables o información que provenga de una base de datos, debemos de filtrarla. Para ello solamente tendremos que sustituir los caracteres considerados como peligrosos por sus equivalentes HTML:

    &  –>  &
    <  –>  <
    >   –>  >
    “  –>  “
    ‘  –>  ‘
    /  –>  /

Este supuesto solo es válido si la información se va a mostrar en el cuerpo HTML, NO en el código JAVASCRIPT o CSS. En estos casos hay que prestar atención a otros supuestos adicionales, que dejamos para otro post.

La implementación de este filtro es sumamente simple. A continuación unos ejemplos de cómo implementarlo. Aunque no son los más elegantes ni eficientes, sí son los más simples de entender:

Java



PHP



C#



Python



Caso 2: Permitiendo tags HTML simples

Hay ocasiones que necesitamos que el usuario pueda añadir ciertos tags HTML simples y permitir que sean interpretados.

De forma errónea muchas veces se tiende a hacer enormes listas de tags HTML considerado peligrosos (esta técnica se conoce como lista negra), intentando dejar solamente los que se desea permitir al usuario. Pero, ¿por qué es esto un error?

Porque como programadores estamos esperando que los usuario introduzcan cosas como: “

Autor: cr0hn


Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 206
  • Actividad:
    0%
  • Reputación 1
  • %ERRORLEVEL%
    • Ver Perfil
    • q3rv0
    • Email
« Respuesta #1 en: Diciembre 26, 2013, 05:40:27 pm »


Tanto quilombo para filtrar un XSS en php??

Código: PHP
  1. You are not allowed to view links. Register or Login(param, ENT_QUOTES);
Web: You are not allowed to view links. Register or Login

Twitter: You are not allowed to view links. Register or Login

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    16.67%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #2 en: Diciembre 26, 2013, 10:12:23 pm »
Si, me parecio lo mismo cuando lo vi. Pero me parecio bueno compartirlo. en estos dias subo otro paper mas completo que estoy por terminar!


 

¿Te gustó el post? COMPARTILO!



mod_security y mod_evasive en GNU/Linux CentOS (para detener ataques DDOS).

Iniciado por july

Respuestas: 5
Vistas: 2922
Último mensaje Noviembre 21, 2012, 05:30:47 am
por Adastra
Script para automatizar 2 grados de ataques efectivos en sqlmap

Iniciado por VulN3t

Respuestas: 0
Vistas: 736
Último mensaje Diciembre 16, 2017, 01:33:12 am
por VulN3t
[Cloudflare] Deteniendo ataques DDos/Proxys/Otros

Iniciado por ZanGetsu

Respuestas: 5
Vistas: 2894
Último mensaje Septiembre 27, 2013, 09:27:20 pm
por ZanGetsu
Ataques DDos a través de XSS Persistente By @alvarodh5

Iniciado por blackdrake

Respuestas: 5
Vistas: 3277
Último mensaje Noviembre 27, 2015, 11:36:26 am
por NikoMdq
Como hacer ataques DDoS [linux]

Iniciado por unkdown

Respuestas: 3
Vistas: 2283
Último mensaje Julio 21, 2015, 07:51:12 pm
por Baxtar