Bloque I: Seguridad web

Documentos relacionados
Sesión 13. Seguridad en la web. Luisa Fernanda Rincón Pérez

Desarrollo Web con PHP

Seguridad Web. Álvaro Gómez Giménez UAM.NET. Álvaro Gómez Giménez (UAM.NET) Seguridad Web / 19

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre CODIGO LIMPIO CODIGO SEGURO.

SQL Injection. 1º Edición - 11 y 12 de Mayo Montevideo, Uruguay

Computación Web (Curso 2013/2014)

SECURITY DAY PERU. Ataques a las Aplicaciones Web. Explotación de Aplicaciones Web. Technologies SOLUTIONS FOR KEEPING YOUR BUSINESS UP

Hacking Ético Web. I Jornadas Tecnológicas CEEPS Carlos García García i52gagac@uco.es

Seguridad en Aplicaciones Web

Ejemplo de aplicación PHP: Tienda

PHP y MySQL Domine el desarrollo de un sitio Web dinámico e interactivo (3ª edición)

Computación Web (Curso 2013/2014)

Seguridad en Aplicaciones Web

Seguridad WEB Inyección de código

Seguridad Web: SQL Injection & XSS

Seguridad Web: SQL Injection & XSS

S E G U R I D A D E N A P L I C A C I O N E S W E B

Ingeniero Técnico en Informática - UCA Máster en Ingeniería del Software - US Máster en Seguridad de las TIC - US

Web : Ataque y Defensa. Claudio Salazar Estudiante Ing. Civil Informática UTFSM Pinguinux Team

Unidad Técnicas para generar formularios, validarlos y procesarlos en el mismo documento web. J.J.

Amenazas a Aplicaciones Web Ing. Mauricio Andrade Guzmán. Subdirección de Seguridad de la Información/UNAM-CERT

Aplicaciones Web. Aplicaciones Distribuidas

Máster Profesional en Tecnologías de Seguridad. Seguridad en la web

SQL INJECTION. Benitez, Marcelo Chinikailo, Cristian De la Cruz, Leonardo Klas, Julián Criptografía y Seguridad Informática.

Aplicaciones Web Mg. Abril Saire Peralta

ESTÁNDAR DE CODIFICACIÓN JEE CHECKLIST

Seguridad en Aplicaciones Web Basado en la programación en PHP

Desarrollo de Código Seguro. Seguridad en PHP. Introducción. Register Globals

SEGURIDAD EN APLICACIONES WEB. Autor: Siler Amador Donado

AGENDA. Mejorando la Seguridad en Aplicaciones Web. Introducción. La Web Promesas y Amenazas. Asegurando la Red y el Servidor de Web

Objetivos y Temario CURSO PHP Y MySQL

Capítulo 2.- Vulnerabilidades en aplicaciones web.

Ataques más comunes. Virginia Armas Alejandro Do Nascimiento

Web: Ataque y Defensa. my kung fu is stronger than yours, The lone Gunmen

Aspectos Básicos de la Seguridad en Aplicaciones Web

Aplicaciones seguras con ClaseSeguridad

Seguridad en Sistemas Informáticos (SSI) Programación Segura

Programación páginas web con PHP

Seminario de SEGURIDAD WEB. Pedro Villena Fernández

Cross Site Scripting. Conceptos Básicos y Casos prácticos. Antonio González Castro antonio@noveria.es

ANÁLISIS DE LAS PRINCIPALES VULNERABILIDADES DE UN SISTEMA INFORMÁTICO

Desarrollo PHP con Webmatrix

POW. Tema 8: Acceso a Base de Datos y Sesiones con PHP

PHP 7 Desarrollar un sitio web dinámico e interactivo

PHP Hypertext PreProcessor

Formularios en HTML 09/02/2015. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos

De esta manera, cuando el usuario rellena un campo cómo el siguiente... <input type="text" name="telefono"> </form>

PROGRAMACIÓN PÁGINAS WEB JAVASCRIPT Y PHP

Formularios en HTML. Grupo de Ingeniería del Software. Departamento de Lenguajes y Sistemas Informáticos. October 11

Desarrollo Seguro. Programa de Estudio.

HTML, PHP y bases de datos

Security Research XSS CROSS SITE SCRIPTING Chebyte chebyte at gmail.com

APRENDE A CREAR UNA PÁGINA WEB CON HTML

About Me. Mario Robles Tencio

Data Bases 2. La sintaxis precisa de esta función es: mysql_pconnect (nombre del servidor, el usuario de la base de datos, password ) ;

hipervinculos La página que rescata el valor pasado como parámetro es la siguiente: <html> <head> <title>problema</title> </head> <body> <?

Validación con Expresiones Regulares

PHP y Acceso a Datos

Desarrollo seguro en Drupal. Ezequiel Vázquez De la calle

HTML Dinámico: Procesado de Formularios - Validación en Cliente -

Aplicaciones Web (Curso 2015/2016)

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 3.

Tema IV El lenguaje de programación PHP Tipos de Datos

Unidad Didáctica 2 GENERACIÓN DE DOCUMENTOS WEB CON GUIONES DE SERVIDOR

UNIVERSIDAD TECNICA DE MANABI Facultad de Ciencias Informáticas Ingeniería en sistemas. SEGURIDAD INFORMATICA Tema: Mysql Injection

PÁGINAS DINÁMICAS WEB CON PHP. Unidad 4 Aplicaciones Web

Programador Web en Drupal + PHP + Javascripts + MySQL. Nivel Profesional. Informática y Programación

Índice: Tema Aplicaciones basadas en Sesiones

.com [IN]SEGURIDAD WEB ING. SAUL MAMANI M.

Bypass WAFs KUNAK CONSULTING. Automatizando SQLi con Python. Omar Palomino.

Transcripción:

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.1. Por qué es importante la seguridad? Un gran poder conlleva Una gran responsabilidad

3.1. Por qué es importante la seguridad? Prácticamente todas las aplicaciones PHP están desarrolladas para la web Y la web es un sitio peligroso PHP es gratuito y fácil de aprender PHP es muy atractivo para amateurs PHP está siendo utilizado cada vez en sitios más grandes Y la información que gestiona es cada vez más sensible

3.1. Por qué es importante la seguridad? Las principales prácticas se puede agrupar en dos ideas Validación Escapado

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.2. Validación Todos los datos de entrada están contaminados TODOS LOS DATOS DE ENTRADA

3.2. Validación Mis entradas de datos Query string http://www.google.com/?search=hola Canales RSS http://www.loalf.com/feed.rss API's de terceros http://dev.twitter.com Formularios Cookies

3.2. Validación Por qué hay que validar los datos de entrada? Evitar comportamientos no esperados de la aplicación Evitar ganar acceso a una aplicación a la que no está autorizado Evitar que la aplicación se rompa de manera malintencionada

3.2. Validación Register Globals Es una directiva de configuración que automáticamente inyecta variables en el script. <?php // http://www.misitio.com/index.php?name=javi echo $name; // javi?> Desactivado por defecto desde PHP 4.2.0 y no debería activarse

3.2. Validación Un ejemplo <form action= process.php method= post > Nombre: <input type= text name= nombre /><br /> Edad: <input type= text name= edad /><br /> Color preferido: <select name= color > <option value= azul >Azul</option> <option value= verde >Verde</option> <option value= amarillo >Amarillo</option> <option value= rojo >Rojo</option> </select> <input type= submit /> </form>

3.2. Validación Validación numérica Todos los datos recibidos por PHP (GET/POST/COOKIE) son cadenas de texto. Hay que convertirlos a números para que sea más eficiente y menos peligroso. Deben ser convertidos a números mediante un casting (int) $_POST['edad']; (float) $_POST['precio'];

3.2. Validación Validación de texto PHP viene por defecto con CTYPE, una extensión que permite de manera cómoda validar cadenas de texto if(!ctype_alnum($_post['password'])){ echo Sólo caracteres A Za z0 9 permitidos ; } if(!ctype_alpha($_post['username'])){ echo Sólo caracteres A Za z permitidos ; } Y otras muchas más funciones http://php.net/manual/en/book.ctype.php

3.2. Validación Validación complejas Como validar un email, una URL, una IP, un DNI, una fecha? Expresiones regulares. if(!preg_match( '/^\w+@[a za Z_]+?\.[a za Z]{2,3}$/', $_POST['email']) ){ } echo Email no válido ; No hace falta saber expresiones regulares, sólo saber dónde encontrarlas http://regexlib.com

3.2. Validación Todo cambia Con letra? España? Numérico ( +34?), máx 9 números Un email Igual que el otro Obligatorio Más campos...

3.2. Validación Validación en cliente vs servidor Validación cliente Usabilidad Validación cliente Seguridad Nadie dijo que se excluyentes

3.2. Validación Burlando formularios 1. Deshabilitar Javascript 2. Enviar formularios desde web 3. Instalando Firebug

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.3. Escapado En que consiste? Evitar que el código generado por nuestra aplicación pueda resultar dañino Dependiendo del dónde imprimamos la información las reglas de escapado son diferentes

3.3. Escapado Escapando datos para generar HTML htmlentities() Ejemplo echo htmlentities('<b>texto en negrita</b>'); // >b<texto en negrita>/b<

3.3. Escapado Escapando datos para generar SQL *_escape_string() Para el caso concreto de mysql echo mysql_escape_string( WHERE name='javi' ); // WHERE name = \'javi\'

3.3. Escapado Evitad cosas como estas $query = SELECT * FROM users WHERE username = '{$_POST['username']}' ; Utilizad en su lugar Prepared Statements http://www.slideshare.net/flaiwebnected/iniciacin-php-5-php-y-mysql

3.3. Escapado $sql = 'SELECT * FROM users WHERE username = :username'; $stmt = $dbh >prepare($sql); $stmt >bindparam(':username', $clean['username']) $stmt >execute(); $results = $stmt >fetchall();

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.4. Ataque XSS XSS = Cross Site Scripting Estos ataques se aprovechan de la confianza del usuario en la aplicación El atacante inyecta código JavaScript en nuestra web

3.4. Ataque XSS Algunas cosas que podría lograr mediante un ataque XSS Robar las cookies de un usuario y entrar en su lugar Mostrar una página falsa de login en tu web (phising) Llevar a cabo cualquier acción como si fuera otro usuario

3.4. Ataque XSS Dos tipos de ataques XSS Persistentes Son menos frecuentes Datos introducidos por el usuario son almacenados de manera PERSISTENTE (db) y utilizados para generar una página HTML Reflejados Son los más frecuentes Datos introducidos por el usuario son utilizados INMEDIATAMENTE para generar una página HTML

3.4. Ataque XSS Algunos ejemplos... malignos

3.4. Ataque XSS Quién es Samy? http://namb.la/popular/ Un agujero XSS en el filtro HTML de MySpace Cuando visitabas el perfil de Samy - Te añadía a tí como amigo suyo - Se clonaba en tu propio perfil En 20 y tras un millón de peticiones amigos MySpace se vino abajo

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.5. Ataque CSRF CSRF = Cross site request forgery Explota la confianza de un sitio web en un usuario La víctima del ataque lanza una petición HTTP sin saberlo, normalmente a URLs Que requieren de un acceso privilegiado. El escapado evitará que tu aplicación sirva de vehículo para ataques CSRF pero no evitará que los recibas.

3.5. Ataque CSRF Un ejemplo de ataque CSRF

3.5. Ataque CSRF Cómo protegerse de este tipo de ataques <?php session_start(); $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token;?> <form action= miform.php method= POST >... <input type= hidden name= token value= <?php echo $token;?> /> </form>

3.5. Ataque CSRF Cómo protegerse de este tipo de ataques <?php if(isset($_session['token']) && isset($_post['token']) && $_POST['token'] == $_SESSION['token'] ){ //No es un ataque CSRF }?>

3.5. Ataque CSRF Google tampoco se salva http://www.securiteam.com/securitynews/5zp010uqkk.html Mediante un ataque CSRF se podía cambiar la contraseña de un usuario

1. Por qué es importante la seguridad? 2. Validación 3. Escapado 4. Ataques XSS 5. Ataques CSRF 5. SQL-Injection 6. Code Injection 7. Session riding Curso de Introducción a PHP 5 *POO = Programación Orientada a Objetos

3.6. SQL Injections SQL injections o inyección de SQL Un usuario utiliza alguna de las entradas (normalmente formularios) para modificar las sentencias SQL en la aplicación. Las entradas consisten en código SQL parcial, que combinado con el existente da lugar a un comportamiento no deseado Cómo protegerse: escapa los parámetros de tus sentencias SQL

3.6. SQL Injections Un ejemplo (un clásico) Formulario de acceso a una zona restriginda (formulario de login) <form action= login.php action= POST > usuario: <input type= text name= username /> <br /> contraseña: <input type= password name= password /> <br /> <input type= submit /> </form>

3.6. SQL Injections Un ejemplo (un clásico) En algún lugar de nuestro script comprobamos que ese usuario existe de la siguiente manera $username = $_POST['username']; $password = $_POST['password']; $sql = SELECT * FORM users WHERE username = '{$username}' AND password = '{$password}' ; // Continuamos con el resto if(count($results)>0){ // login }

3.6. SQL Injections Un ejemplo (un clásico) Que ocurre si el usuario introduce username' OR 1=1 Tenemos esto SELECT * FORM users WHERE username = 'username' OR 1=1 'AND password = 'contraseña'

3.6. SQL Injections