SlideShare a Scribd company logo
1 of 55
Download to read offline
Seguridad Web con PHPSeguridad Web con PHP
“Cómo desarrollar una aplicación segura”
Seguridad Web con PHPSeguridad Web con PHP
• ¿Necesita mi aplicación ser segura?
• ¿Es mi aplicación 100% segura?
• ¿Cuándo una aplicación es segura?
Seguridad
Seguridad Web con PHPSeguridad Web con PHP
Ejemplos
Seguridad Web con PHPSeguridad Web con PHP
Ejemplos
Seguridad Web con PHPSeguridad Web con PHP
SQL
Injection
Seguridad Web con PHPSeguridad Web con PHP
SQL Injection
• Qué es una SQL injection?
• Cómo funcionan?
SELECT id FROM users WHERE user='$user' AND pass='$pass'
SELECT id FROM users WHERE user='vader' AND pass='darkside'
SELECT id FROM users WHERE user='' or 1=1 #' AND pass='test'
Seguridad Web con PHPSeguridad Web con PHP
Nuestra aplicación
Tabla ‘users’
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHPSeguridad Web con PHP
SQL Injection
• Cómo evitarlas?
• Escapar caracteres
• Parameterized Queries
• Database Access Abstraction Layer
• PDO
• AdoDB
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
Un poco de humor
Seguridad Web con PHP
Fuente: xkcd.com/327/
Seguridad Web con PHP
Un poco de humor
Seguridad Web con PHP
Seguridad Web con PHPSeguridad Web con PHP
XSS:
Cross Site
Scripting
Seguridad Web con PHP
XSS: Cross Site Scripting
Seguridad Web con PHP
Consiste en inyectar código
HTML/JavaScript en un sitio sobre el
que no tenemos control.
• Existen dos grandes tipos: Persistente y No Persistente.
• Pueden permitir mostrar información falsa, manipular un formulario, o incluso
robar las cookies del usuario.
Seguridad Web con PHPSeguridad Web con PHP
XSS: Cross Site Scripting
• Como funciona?
Estás Buscando <strong>'<?php echo $_GET['q']; ?>'</strong>
Estás Buscando <strong>'test'</strong>
Estás Buscando <strong>'<span
style="color:red;">test</span>'</strong>
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHPSeguridad Web con PHP
XSS: Cross Site Scripting
• Cómo evitarlas?
• Eliminar todo tag HTML
• Permitir una White-List de elementos• NO Permitir una White-List de elementos
• Convertir caracteres peligrosos
• Implementar BBCode o similar
• Usar una librería preparada para esto
• HTMLPurifier ( http://www.htmlpurifier.org )
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
XSS: Cross Site Scripting
Seguridad Web con PHP
Texto a inyectar
Código final
• XSS in Javascript
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHPSeguridad Web con PHP
File Uploads
Seguridad Web con PHPSeguridad Web con PHP
File Uploads
• Cuál es el riesgo?
Las vulnerabilidades en uploads de archivos permiten a un atacante subir un
archivo de un tipo no permitido en un servidor, pudiendo llegar a ejecutarlo.
La validación del tipo de archivo es el paso clave, y suele realizarse de
diferentes maneras:
• Chequeando $_FILES['archivo']['type']:
• Está solución es peligrosa y poco efectiva. El valor es seteado por el
CLIENTE al enviar el archivo, por lo tanto, es completamente
manipulable.
• Revisando si es una imagen real con getimagesize() o funciones similares:
• Este método es ligeramente mas seguro, pero igualmente puede
manipularse utilizando una imagen con código escondido.
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHPSeguridad Web con PHP
File Uploads
• Entonces… Cual es la forma segura?
Hay varios métodos que aseguran que el archivo no se ejecute. Si bien
debería bastar con solo uno, es recomendable aplicar todos para sumar capas
extras de seguridad.
• Generar el nombre del archivo a mano, asegurandose de que la
extensión sea simple, y sea un tipo de archivo no ejecutable (No PHP, Py,
CGI)
• Desde un archivo .htaccess, prohibir la ejecución de scripts en el
directorio.
• Desde los permisos CHMOD del archivo subido, eliminar los permisos de
ejecución.
Seguridad Web con PHPSeguridad Web con PHP
LFI / RFI:
File
Inclusions
Seguridad Web con PHP
LFI / RFI: File Inclusion
Seguridad Web con PHP
Los ataques de File Inclusion permiten que un atacante obtenga acceso o
ejecute un archivo al que no debería tener acceso.
• LFI (Local File Inclusion) cuando se logra incluir o ejecutar un archivo
que está en el mismo servidor del sitio web.
• RFI (Remote File Inclusion) cuando se incluye o ejecuta un archivo publico
que se encuentra en un servidor externo.
Pueden distinguirse varios tipos:
Seguridad Web con PHP
LFI / RFI: File Inclusion
Seguridad Web con PHP
• LFI: Local File Inclusion
Permite ver información sensible del servidor. Puede suceder con un script que abre
un archivo, por ejemplo, con “fopen()”; o cuando el script está incluyendo y
ejecutando otro con “include()”, “require()” o similares.
Código vulnerable:
Código Ejecutado:
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
LFI / RFI: File Inclusion
Seguridad Web con PHP
• RFI: Remote File Inclusion
Código vulnerable:
Es similar a la LFI, pero provoca la inclusión de archivos externos al
servidor. Mayormente es útil en caso de que se presente con la
función “include()” o similares.
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
LFI / RFI: File Inclusion
Seguridad Web con PHP
• RFI: Remote File Inclusion
Forzar la extensión puede ser útil.
Sin embargo, dependiendo del sistema de archivos del servidor usando
caracteres extraños sigue siendo vulnerable. Si se combina con una buena
validación del nombre, se evitan la mayoría de los problemas.
La forma mas segura es replantear la lógica, de forma tal que nunca se
deba incluir una URL obtenida del usuario, sin previamente revisar contra
una lista de archivos permitidos.
Seguridad Web con PHPSeguridad Web con PHP
CSRF:
Cross Site Request Forgery
Seguridad Web con PHP
CSRF: Cross Site Request Forgery
Seguridad Web con PHP
• Qué es?
• Se basa en la ejecución involuntaria de acciones en el navegador de
cliente.
• Permite realizar requests desde el navegador de usuario, manteniendo su
sesión y cookies.
• Muy común y uno de los problemas mas dificiles de solucionar
Seguridad Web con PHP
CSRF: Cross Site Request Forgery
Seguridad Web con PHP
• Cómo explotarlo?
• La forma más simple y primitiva, es forzar al usuario mediante
ingeniería social a ingresar a una URL específica.
• Una forma ligeramente mas avanzada es hacerlo abrir alguna página (o
email) que contenga lo siguiente:
• Existen muchas mas formas:
• Hacer al usuario abrir un sitio con un código javascript malicioso
• Pedir que el usuario complete un formulario
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
CSRF: Cross Site Request Forgery
Seguridad Web con PHP
• Cómo Solucionarlo?
• Evitar usar parametros GET para acciones que provoquen cambios
persistentes elimina algunos de los riesgos, pero no todos
• La técnica mas efectiva es el uso de “Tokens”
Seguridad Web con PHP
CSRF: Cross Site Request Forgery
Seguridad Web con PHP
• Tokens?
• Los tokens son claves únicas generadas para identificar al usuario
• La forma mas común de implementarlo es generando una clave aleatoria,
guardando una copia en una SESSION, y enviando otra a través de un campo
oculto en todos los formularios
• Luego, la aplicación valida y exige que ambos tokens coincidan para
poder realizar una operación.
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHPSeguridad Web con PHP
Buenas Prácticas
Seguridad Web con PHP
Hashes
Seguridad Web con PHP
• Qué son?
• Las funciones hash transforman una cadena de cualquier cantidad de
caracteres en una de un ancho fijo.
• Hay diversos tipos de hashes, pero los mas utilizados en Seguridad
informática son aquellos uni-direccionales. De estas, las dos funciones mas
comunes son MD5 y SHA1.
• Un mismo input va a dar siempre el mismo output.
test -> 098f6bcd4621d373cade4e832627b4f6
Test -> 0cbc6611f5540bd0809a388dc95a615b
Seguridad Web con PHP
Hashes
Seguridad Web con PHP
• ¿Para qué sirven?
• Los hashes permiten almacenar contraseñas en una base de datos, de
forma tal que si alguien obtuviese acceso, no pueda obtener la contraseña
original, solo su hash.
• La implementación desde PHP es muy sencilla:
• Debemos almacenar el hash al registrar al usuario, y cada vez que
necesitemos verificarlo, comparar los hashes.
Seguridad Web con PHP
Hashes
Seguridad Web con PHP
• Salts
• Con el tiempo surgieron bases de datos de hashes (rainbow tables) y sus
frases originales, permitiendo buscar un hash y obtener la contraseña.
• Para evitar esto, se utilizan los Salts. Son cadenas que se juntan con
aquella que se desea hashear para generar un hash distinto y único.
Seguridad Web con PHPSeguridad Web con PHP
Demo
Seguridad Web con PHP
Encriptación
Seguridad Web con PHP
• Qué es y para qué sirve?
• Se llama encriptación a las técnicas que buscan hacer ininteligible una
información a intrusos (Lectores no autorizados).
• En seguridad informática, generalmente se utiliza una clave, necesaria
tanto para Encriptar como para luego Desencriptar el mensaje.
• Es útil para almacenar información sensible y transmitirla por medios no
seguros.
Seguridad Web con PHP
Encriptación
Seguridad Web con PHP
• Cómo se aplican?
• Hay muchos métodos de implementación distintos. La clase mcrypt
agrupa la mayoría de los métodos recomendados:
Seguridad Web con PHP
Exposición Innecesaria
Seguridad Web con PHP
• Se llama así a la mala práctica de mostrar errores o
información del sistema a los usuarios.
• Es correcto mostrarlos durante las etapas de
desarrollo, pero en Producción deberian esconderse
al usuario.
• Si es posible, es conveniente guardarlos en un log.
Seguridad Web con PHP
Exposición Innecesaria
Seguridad Web con PHP
• PHP permite configurar varias opciones con respecto a los
errores
• display_errors define si los mensajes de error se van a imprimir al
usuario o no. En producción debería tener el valor “0” y en
desarrollo “1”
• error_reporting establece que nivel de errores quiere tenerse en
cuenta; pudiendo configurarse para que solo muestre errores graves
(“E_ERROR | E_PARSE”) o todo tipo de advertencia (“E_ALL”).
• error_log define el nombre del archivo donde se guardan los logs
de errores.
Seguridad Web con PHP
Exposición Innecesaria
Seguridad Web con PHP
• PHP permite configurar varias opciones con respecto a los
errores en el php.ini, o utilizando ini_set().
• display_errors define si los mensajes de error se van a imprimir al
usuario o no. En producción debería tener el valor 0 y en desarrollo 1.
• error_reporting establece que nivel de errores quiere tenerse en
cuenta; pudiendo configurarse para que solo muestre errores graves
(“E_ERROR | E_PARSE”) o todo tipo de advertencia (“E_ALL”).
• error_log define el nombre del archivo donde se guardan los logs
de errores, en caso de que log_errors sea igual a 1.
• mysqli->error nunca debería ser impreso en producción. Puede
logearse con error_log().
Seguridad Web con PHP
Exposición Innecesaria
Seguridad Web con PHP
• APACHE por defecto incluye en los headers su versión, y
la de PHP.
• Se debe editar el httpd.conf/apache2.conf e incluir las siguientes
lineas:
ServerTokens Prod 
ServerSignature Off
• En el php.ini o a través de ini_set() debe desactivarse
expose_php:
expose_php = off
Seguridad Web con PHP
Exposición Innecesaria
Seguridad Web con PHP
• APACHE puede mostrar un listado de archivos presentes
en una carpeta si no existe un index
• Puede configurarse desde el
httpd.conf/apache2.conf, desde el
virtualhost, o bien desde el .htaccess
• Debe incluirse la linea:
Options -Indexes 
Y en caso de que estén presentes algunas 
de las siguientes, eliminarlas:
Options +Indexes 
IndexIgnore * 
 
Seguridad Web con PHP
Otras configuraciónes de PHP
Seguridad Web con PHP
register_globals permite que toda variable POST, GET y REQUEST se
registren como variables globales. Es decir, que en lugar de acceder desde
$_POST[‘variable’] podemos acceder desde $variable.
• Esto es muy peligroso! El siguiente código es vulnerable con
register_globals = on, si el usuario envia por algun medio la variable
userCorrecto:
Seguridad Web con PHP
Otras configuraciónes de PHP
Seguridad Web con PHP
magic_quotes_gpc escapa automáticamente toda variable enviada
por GET, POST o COOKIE. Es recomendable configurarlo en off, y
escapar las variables manualmente en el momento de ingresarlas a
una DB:
• Hace que el código sea portable de un servidor a otro, sin generar 
vulnerabilidades. 
• Evita tener las barras en las validaciones previas a la subida (Largo 
del string, caracteres prohibidos, etc)
• Acostumbra al programador a ser consciente y estar atento a otras 
posibles fuentes (Además de GPC) por las que puede surgir una 
vulnerabilidad
Seguridad Web con PHP
Otras configuraciónes de PHP
Seguridad Web con PHP
allow_url_include y allow_url_fopen establecen si las
funciones include y fopen pueden abrir urls externas, o
solamente paths a archivos locales.
• Desactivarlas da grandes ventajas en seguridad, evitando RFI.
• En algunos casos, es útil usar fopen para abrir urls externas, y con 
estas opciones en OFF, es imposible. Debe recurrirse a alguna librería 
adicional como CURL.
Seguridad Web con PHP
Preguntas · Dudas · Información
Seguridad Web con PHP
MUCHAS GRACIAS!
Nazareno Lorenzo
Full Stack Web Developer
NazarenoLorenzo@gmail.com
www.nazarenolorenzo.com.ar
Argentina, Buenos Aires
Todas las marcas, logos e isologos utilizados en la presentación son propiedad de sus respectivos propietarios

More Related Content

Viewers also liked

SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010magnobalt
 
Seguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHPSeguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHP7th_Sign
 
Desarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDesarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDavid J. Brenes
 
Tutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPTutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPElwin Huaman
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios phpwilliamCG27
 

Viewers also liked (7)

Seguridad en PHP (es)
Seguridad en PHP (es)Seguridad en PHP (es)
Seguridad en PHP (es)
 
SQL Injection Joinea 2010
SQL Injection Joinea 2010SQL Injection Joinea 2010
SQL Injection Joinea 2010
 
Web Services
Web ServicesWeb Services
Web Services
 
Seguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHPSeguridad en el Desarrollo de Aplicaciones Web PHP
Seguridad en el Desarrollo de Aplicaciones Web PHP
 
Desarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formulariosDesarrollo rápido con PHP y Symfony (VI): Los formularios
Desarrollo rápido con PHP y Symfony (VI): Los formularios
 
Tutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAPTutorial Web Services en PHP, REST, SOAP
Tutorial Web Services en PHP, REST, SOAP
 
Gestion de formularios php
Gestion de formularios phpGestion de formularios php
Gestion de formularios php
 

Similar to Seminario Seguridad con PHP

[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP7th_Sign
 
Vulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPVulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPMoises Silva
 
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Oskar Laguillo
 
Hypertext transfert protocol
Hypertext transfert protocolHypertext transfert protocol
Hypertext transfert protocolOscar Eduardo
 
PHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebPHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebRightster
 
Hack & beers lleida seguridad en desarrollo fullstack
Hack & beers lleida   seguridad en desarrollo fullstackHack & beers lleida   seguridad en desarrollo fullstack
Hack & beers lleida seguridad en desarrollo fullstackMarc Pàmpols
 
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2Juan Pablo
 
Apache
ApacheApache
ApacheXavier
 
Taller Hacking Ético #Sysmana2012
Taller Hacking Ético #Sysmana2012Taller Hacking Ético #Sysmana2012
Taller Hacking Ético #Sysmana2012iesgrancapitan.org
 
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio WebWebinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio WebSucuri
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]RootedCON
 

Similar to Seminario Seguridad con PHP (20)

[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP
 
Vulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHPVulnerabilidades en Aplicaciones Web PHP
Vulnerabilidades en Aplicaciones Web PHP
 
Sicsti hacking
Sicsti hackingSicsti hacking
Sicsti hacking
 
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
Virus, el arte de algunos - Alberto García de Dios (/Rooted CON 2011)
 
Hypertext transfert protocol
Hypertext transfert protocolHypertext transfert protocol
Hypertext transfert protocol
 
Temas owasp
Temas owaspTemas owasp
Temas owasp
 
PHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad WebPHP Avanzado: Seguridad Web
PHP Avanzado: Seguridad Web
 
Hack & beers lleida seguridad en desarrollo fullstack
Hack & beers lleida   seguridad en desarrollo fullstackHack & beers lleida   seguridad en desarrollo fullstack
Hack & beers lleida seguridad en desarrollo fullstack
 
Web cryptography
Web cryptographyWeb cryptography
Web cryptography
 
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
Introducción a La Seguridad Desde La Perspectiva Del Desarrollador V2
 
Apache
ApacheApache
Apache
 
Taller Hacking Ético #Sysmana2012
Taller Hacking Ético #Sysmana2012Taller Hacking Ético #Sysmana2012
Taller Hacking Ético #Sysmana2012
 
Flash player security
Flash player securityFlash player security
Flash player security
 
WebAttack - Presentación
WebAttack - PresentaciónWebAttack - Presentación
WebAttack - Presentación
 
Owasp proyecto
Owasp proyectoOwasp proyecto
Owasp proyecto
 
Curso php-my sql-clase-2
Curso php-my sql-clase-2Curso php-my sql-clase-2
Curso php-my sql-clase-2
 
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio WebWebinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
Webinar: 10 Consejos para Mejorar la Postura de Seguridad de tu Sitio Web
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
 
CodeCamp 2010 | Diez formas de escribir código (in)seguro
CodeCamp 2010 | Diez formas de escribir código (in)seguroCodeCamp 2010 | Diez formas de escribir código (in)seguro
CodeCamp 2010 | Diez formas de escribir código (in)seguro
 
Phish and tricks
Phish and tricksPhish and tricks
Phish and tricks
 

Recently uploaded

Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfMiSpotify
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfLeonardoOa4
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdfRodrigo Cerón
 
02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdfRodrigo Cerón
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfdaa100407
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfjuanrubenc78
 
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...AlexaRamirez39
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarjosuesj13
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfdarosario3d
 

Recently uploaded (9)

Virus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdfVirus -Josue Cabascango _20240322_194349_0000.pdf
Virus -Josue Cabascango _20240322_194349_0000.pdf
 
Simuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdfSimuladores de circuitos electrónicos.pdf
Simuladores de circuitos electrónicos.pdf
 
03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf03 - RUP_Elaboracion_Construccion_1_2024.pdf
03 - RUP_Elaboracion_Construccion_1_2024.pdf
 
02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf02 - RUP_Introduccion_Definicion.pdf
02 - RUP_Introduccion_Definicion.pdf
 
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdfHerramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
Herramientas de Mantenimiento_Soporte Técnico_David Andrade.pdf
 
Formato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdfFormato de práctica reflexiva ante una problemática social.docx.pdf
Formato de práctica reflexiva ante una problemática social.docx.pdf
 
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
Diseño de Algoritmos Paralelos. Mejorando la eficiencia computacional aprovec...
 
Los mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizarLos mejores simuladores electrónicos que se pueden utilizar
Los mejores simuladores electrónicos que se pueden utilizar
 
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdfAlgoritmos Paralelos - Actividad 14 - UNIBE.pdf
Algoritmos Paralelos - Actividad 14 - UNIBE.pdf
 

Seminario Seguridad con PHP

  • 1. Seguridad Web con PHPSeguridad Web con PHP “Cómo desarrollar una aplicación segura”
  • 2. Seguridad Web con PHPSeguridad Web con PHP • ¿Necesita mi aplicación ser segura? • ¿Es mi aplicación 100% segura? • ¿Cuándo una aplicación es segura? Seguridad
  • 3. Seguridad Web con PHPSeguridad Web con PHP Ejemplos
  • 4. Seguridad Web con PHPSeguridad Web con PHP Ejemplos
  • 5. Seguridad Web con PHPSeguridad Web con PHP SQL Injection
  • 6. Seguridad Web con PHPSeguridad Web con PHP SQL Injection • Qué es una SQL injection? • Cómo funcionan? SELECT id FROM users WHERE user='$user' AND pass='$pass' SELECT id FROM users WHERE user='vader' AND pass='darkside' SELECT id FROM users WHERE user='' or 1=1 #' AND pass='test'
  • 7. Seguridad Web con PHPSeguridad Web con PHP Nuestra aplicación Tabla ‘users’
  • 8. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 9. Seguridad Web con PHPSeguridad Web con PHP SQL Injection • Cómo evitarlas? • Escapar caracteres • Parameterized Queries • Database Access Abstraction Layer • PDO • AdoDB
  • 10. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 11. Seguridad Web con PHP Un poco de humor Seguridad Web con PHP Fuente: xkcd.com/327/
  • 12. Seguridad Web con PHP Un poco de humor Seguridad Web con PHP
  • 13. Seguridad Web con PHPSeguridad Web con PHP XSS: Cross Site Scripting
  • 14. Seguridad Web con PHP XSS: Cross Site Scripting Seguridad Web con PHP Consiste en inyectar código HTML/JavaScript en un sitio sobre el que no tenemos control. • Existen dos grandes tipos: Persistente y No Persistente. • Pueden permitir mostrar información falsa, manipular un formulario, o incluso robar las cookies del usuario.
  • 15. Seguridad Web con PHPSeguridad Web con PHP XSS: Cross Site Scripting • Como funciona? Estás Buscando <strong>'<?php echo $_GET['q']; ?>'</strong> Estás Buscando <strong>'test'</strong> Estás Buscando <strong>'<span style="color:red;">test</span>'</strong>
  • 16. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 17. Seguridad Web con PHPSeguridad Web con PHP XSS: Cross Site Scripting • Cómo evitarlas? • Eliminar todo tag HTML • Permitir una White-List de elementos• NO Permitir una White-List de elementos • Convertir caracteres peligrosos • Implementar BBCode o similar • Usar una librería preparada para esto • HTMLPurifier ( http://www.htmlpurifier.org )
  • 18. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 19. Seguridad Web con PHP XSS: Cross Site Scripting Seguridad Web con PHP Texto a inyectar Código final • XSS in Javascript
  • 20. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 21. Seguridad Web con PHPSeguridad Web con PHP File Uploads
  • 22. Seguridad Web con PHPSeguridad Web con PHP File Uploads • Cuál es el riesgo? Las vulnerabilidades en uploads de archivos permiten a un atacante subir un archivo de un tipo no permitido en un servidor, pudiendo llegar a ejecutarlo. La validación del tipo de archivo es el paso clave, y suele realizarse de diferentes maneras: • Chequeando $_FILES['archivo']['type']: • Está solución es peligrosa y poco efectiva. El valor es seteado por el CLIENTE al enviar el archivo, por lo tanto, es completamente manipulable. • Revisando si es una imagen real con getimagesize() o funciones similares: • Este método es ligeramente mas seguro, pero igualmente puede manipularse utilizando una imagen con código escondido.
  • 23. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 24. Seguridad Web con PHPSeguridad Web con PHP File Uploads • Entonces… Cual es la forma segura? Hay varios métodos que aseguran que el archivo no se ejecute. Si bien debería bastar con solo uno, es recomendable aplicar todos para sumar capas extras de seguridad. • Generar el nombre del archivo a mano, asegurandose de que la extensión sea simple, y sea un tipo de archivo no ejecutable (No PHP, Py, CGI) • Desde un archivo .htaccess, prohibir la ejecución de scripts en el directorio. • Desde los permisos CHMOD del archivo subido, eliminar los permisos de ejecución.
  • 25. Seguridad Web con PHPSeguridad Web con PHP LFI / RFI: File Inclusions
  • 26. Seguridad Web con PHP LFI / RFI: File Inclusion Seguridad Web con PHP Los ataques de File Inclusion permiten que un atacante obtenga acceso o ejecute un archivo al que no debería tener acceso. • LFI (Local File Inclusion) cuando se logra incluir o ejecutar un archivo que está en el mismo servidor del sitio web. • RFI (Remote File Inclusion) cuando se incluye o ejecuta un archivo publico que se encuentra en un servidor externo. Pueden distinguirse varios tipos:
  • 27. Seguridad Web con PHP LFI / RFI: File Inclusion Seguridad Web con PHP • LFI: Local File Inclusion Permite ver información sensible del servidor. Puede suceder con un script que abre un archivo, por ejemplo, con “fopen()”; o cuando el script está incluyendo y ejecutando otro con “include()”, “require()” o similares. Código vulnerable: Código Ejecutado:
  • 28. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 29. Seguridad Web con PHP LFI / RFI: File Inclusion Seguridad Web con PHP • RFI: Remote File Inclusion Código vulnerable: Es similar a la LFI, pero provoca la inclusión de archivos externos al servidor. Mayormente es útil en caso de que se presente con la función “include()” o similares.
  • 30. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 31. Seguridad Web con PHP LFI / RFI: File Inclusion Seguridad Web con PHP • RFI: Remote File Inclusion Forzar la extensión puede ser útil. Sin embargo, dependiendo del sistema de archivos del servidor usando caracteres extraños sigue siendo vulnerable. Si se combina con una buena validación del nombre, se evitan la mayoría de los problemas. La forma mas segura es replantear la lógica, de forma tal que nunca se deba incluir una URL obtenida del usuario, sin previamente revisar contra una lista de archivos permitidos.
  • 32. Seguridad Web con PHPSeguridad Web con PHP CSRF: Cross Site Request Forgery
  • 33. Seguridad Web con PHP CSRF: Cross Site Request Forgery Seguridad Web con PHP • Qué es? • Se basa en la ejecución involuntaria de acciones en el navegador de cliente. • Permite realizar requests desde el navegador de usuario, manteniendo su sesión y cookies. • Muy común y uno de los problemas mas dificiles de solucionar
  • 34. Seguridad Web con PHP CSRF: Cross Site Request Forgery Seguridad Web con PHP • Cómo explotarlo? • La forma más simple y primitiva, es forzar al usuario mediante ingeniería social a ingresar a una URL específica. • Una forma ligeramente mas avanzada es hacerlo abrir alguna página (o email) que contenga lo siguiente: • Existen muchas mas formas: • Hacer al usuario abrir un sitio con un código javascript malicioso • Pedir que el usuario complete un formulario
  • 35. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 36. Seguridad Web con PHP CSRF: Cross Site Request Forgery Seguridad Web con PHP • Cómo Solucionarlo? • Evitar usar parametros GET para acciones que provoquen cambios persistentes elimina algunos de los riesgos, pero no todos • La técnica mas efectiva es el uso de “Tokens”
  • 37. Seguridad Web con PHP CSRF: Cross Site Request Forgery Seguridad Web con PHP • Tokens? • Los tokens son claves únicas generadas para identificar al usuario • La forma mas común de implementarlo es generando una clave aleatoria, guardando una copia en una SESSION, y enviando otra a través de un campo oculto en todos los formularios • Luego, la aplicación valida y exige que ambos tokens coincidan para poder realizar una operación.
  • 38. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 39. Seguridad Web con PHPSeguridad Web con PHP Buenas Prácticas
  • 40. Seguridad Web con PHP Hashes Seguridad Web con PHP • Qué son? • Las funciones hash transforman una cadena de cualquier cantidad de caracteres en una de un ancho fijo. • Hay diversos tipos de hashes, pero los mas utilizados en Seguridad informática son aquellos uni-direccionales. De estas, las dos funciones mas comunes son MD5 y SHA1. • Un mismo input va a dar siempre el mismo output. test -> 098f6bcd4621d373cade4e832627b4f6 Test -> 0cbc6611f5540bd0809a388dc95a615b
  • 41. Seguridad Web con PHP Hashes Seguridad Web con PHP • ¿Para qué sirven? • Los hashes permiten almacenar contraseñas en una base de datos, de forma tal que si alguien obtuviese acceso, no pueda obtener la contraseña original, solo su hash. • La implementación desde PHP es muy sencilla: • Debemos almacenar el hash al registrar al usuario, y cada vez que necesitemos verificarlo, comparar los hashes.
  • 42. Seguridad Web con PHP Hashes Seguridad Web con PHP • Salts • Con el tiempo surgieron bases de datos de hashes (rainbow tables) y sus frases originales, permitiendo buscar un hash y obtener la contraseña. • Para evitar esto, se utilizan los Salts. Son cadenas que se juntan con aquella que se desea hashear para generar un hash distinto y único.
  • 43. Seguridad Web con PHPSeguridad Web con PHP Demo
  • 44. Seguridad Web con PHP Encriptación Seguridad Web con PHP • Qué es y para qué sirve? • Se llama encriptación a las técnicas que buscan hacer ininteligible una información a intrusos (Lectores no autorizados). • En seguridad informática, generalmente se utiliza una clave, necesaria tanto para Encriptar como para luego Desencriptar el mensaje. • Es útil para almacenar información sensible y transmitirla por medios no seguros.
  • 45. Seguridad Web con PHP Encriptación Seguridad Web con PHP • Cómo se aplican? • Hay muchos métodos de implementación distintos. La clase mcrypt agrupa la mayoría de los métodos recomendados:
  • 46. Seguridad Web con PHP Exposición Innecesaria Seguridad Web con PHP • Se llama así a la mala práctica de mostrar errores o información del sistema a los usuarios. • Es correcto mostrarlos durante las etapas de desarrollo, pero en Producción deberian esconderse al usuario. • Si es posible, es conveniente guardarlos en un log.
  • 47. Seguridad Web con PHP Exposición Innecesaria Seguridad Web con PHP • PHP permite configurar varias opciones con respecto a los errores • display_errors define si los mensajes de error se van a imprimir al usuario o no. En producción debería tener el valor “0” y en desarrollo “1” • error_reporting establece que nivel de errores quiere tenerse en cuenta; pudiendo configurarse para que solo muestre errores graves (“E_ERROR | E_PARSE”) o todo tipo de advertencia (“E_ALL”). • error_log define el nombre del archivo donde se guardan los logs de errores.
  • 48. Seguridad Web con PHP Exposición Innecesaria Seguridad Web con PHP • PHP permite configurar varias opciones con respecto a los errores en el php.ini, o utilizando ini_set(). • display_errors define si los mensajes de error se van a imprimir al usuario o no. En producción debería tener el valor 0 y en desarrollo 1. • error_reporting establece que nivel de errores quiere tenerse en cuenta; pudiendo configurarse para que solo muestre errores graves (“E_ERROR | E_PARSE”) o todo tipo de advertencia (“E_ALL”). • error_log define el nombre del archivo donde se guardan los logs de errores, en caso de que log_errors sea igual a 1. • mysqli->error nunca debería ser impreso en producción. Puede logearse con error_log().
  • 49. Seguridad Web con PHP Exposición Innecesaria Seguridad Web con PHP • APACHE por defecto incluye en los headers su versión, y la de PHP. • Se debe editar el httpd.conf/apache2.conf e incluir las siguientes lineas: ServerTokens Prod  ServerSignature Off • En el php.ini o a través de ini_set() debe desactivarse expose_php: expose_php = off
  • 50. Seguridad Web con PHP Exposición Innecesaria Seguridad Web con PHP • APACHE puede mostrar un listado de archivos presentes en una carpeta si no existe un index • Puede configurarse desde el httpd.conf/apache2.conf, desde el virtualhost, o bien desde el .htaccess • Debe incluirse la linea: Options -Indexes  Y en caso de que estén presentes algunas  de las siguientes, eliminarlas: Options +Indexes  IndexIgnore *   
  • 51. Seguridad Web con PHP Otras configuraciónes de PHP Seguridad Web con PHP register_globals permite que toda variable POST, GET y REQUEST se registren como variables globales. Es decir, que en lugar de acceder desde $_POST[‘variable’] podemos acceder desde $variable. • Esto es muy peligroso! El siguiente código es vulnerable con register_globals = on, si el usuario envia por algun medio la variable userCorrecto:
  • 52. Seguridad Web con PHP Otras configuraciónes de PHP Seguridad Web con PHP magic_quotes_gpc escapa automáticamente toda variable enviada por GET, POST o COOKIE. Es recomendable configurarlo en off, y escapar las variables manualmente en el momento de ingresarlas a una DB: • Hace que el código sea portable de un servidor a otro, sin generar  vulnerabilidades.  • Evita tener las barras en las validaciones previas a la subida (Largo  del string, caracteres prohibidos, etc) • Acostumbra al programador a ser consciente y estar atento a otras  posibles fuentes (Además de GPC) por las que puede surgir una  vulnerabilidad
  • 53. Seguridad Web con PHP Otras configuraciónes de PHP Seguridad Web con PHP allow_url_include y allow_url_fopen establecen si las funciones include y fopen pueden abrir urls externas, o solamente paths a archivos locales. • Desactivarlas da grandes ventajas en seguridad, evitando RFI. • En algunos casos, es útil usar fopen para abrir urls externas, y con  estas opciones en OFF, es imposible. Debe recurrirse a alguna librería  adicional como CURL.
  • 54. Seguridad Web con PHP Preguntas · Dudas · Información
  • 55. Seguridad Web con PHP MUCHAS GRACIAS! Nazareno Lorenzo Full Stack Web Developer NazarenoLorenzo@gmail.com www.nazarenolorenzo.com.ar Argentina, Buenos Aires Todas las marcas, logos e isologos utilizados en la presentación son propiedad de sus respectivos propietarios