Seguridad en el Desarrollo de Aplicaciones Web PHP

  • 6,623 views
Uploaded on

Platica impartida por Jesus Reyna e Iván Rico en el flisol 2011 en Mty N.L. México

Platica impartida por Jesus Reyna e Iván Rico en el flisol 2011 en Mty N.L. México

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
6,623
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
169
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Seguridad en el Desarrollo de Aplicaciones Web PHP Seguridad en el Desarrollo de Aplicaciones Web PHP Iván Rico - @7th_sign Jesus Reyna - @jgreyna PHPmx : http://phpmexico.mx/
  • 2. Conceptos
  • 3. Qué es la seguridad?
    • La seguridad es una medida, no una característica
    • La seguridad es difícil de medirse, no tiene unidades
    • También es un problema que está creciendo y que requiere una continua solución evolutiva
    • Así como el diseño de una aplicación, la seguridad debe de ser considerada todo el tiempo (especificaciones iniciales, implementación, pruebas y durante el mantenimiento)
  • 4. Necesidades de Seguridad en una Aplicación Web
    • Que exista un ambiente seguro
    • Hay que darle valor a la privacidad
    • Hay que darle más valor a la información de los clientes
    • Debemos recordar, son los usuarios los que harán uso del sistema
    • Hay que hacer la experiencia del usuario segura y mejorada
    • Los usuarios pueden ser buenos, pero también pueden ser malos
  • 5. PHP en hechos
    • Es un lenguaje muy popular para el desarrollo de aplicaciones web
    • Sencillo de aprender y adoptar
    • Popular entre los “newbies”
    • Durante el desarrollo, regularmente se olvida un pequeño gran aspecto, la seguridad .
    • Se tiene la tendencia de “después lo hacemos”, dando como resultado aplicaciones con severos hoyos de seguridad.
  • 6. Importancia de la seguridad en PHP
    • PHP es y seguirá siendo extensamente usado para el desarrollo de Aplicaciones Web
    • PHP esta marcando camino en el desarrollo de aplicaciones empresariales y el mercado corporativo
    • Es muy efectivo, pero a menudo se pasan por alto medidas para prevenir usuarios maliciosos
    • Las aplicaciones web PHP a menudo terminan trabajando con datos extremadamente sensibles.
  • 7. Seguridad en el ambiente
  • 8. Aspectos a considerar
    • Quién debe de tener acceso físico a los servidores?
    • Quién debe de tener acceso mediante shell?
    • Podrá el servidor web escribir en el sistema de archivos?
    • Es necesario tener lenguajes de programación o servicios adicionales en el servidor?
    • Los servicios de pueden dividir en varios servidores?
  • 9. Bloqueos básicos en el SO
    • Apagar servicios sin uso, actualizar los componentes del sistema, usar los archivos de configuraciones recomendadas.
    • Habilitar un analizador de logs (bitácoras)
    • Habilitar un analizador de integridad del sistema
    • Configurar un firewall local con los puertos estrictamente necesarios (web: 80, 443)
  • 10. Configuración de Apache
    • Antes de realizar cambios, buscar problemas potenciales que puedan afectar en el contexto del servidor
    • Deshabilitar los módulos innecesarios
    • Cambiar los directorios por defecto
    • Cambiar los archivos índices por defecto
    • Usar módulos que proporcionen seguridad adicional a Apache como mod_dosevasive y mod_security
  • 11. mod_dosevasive
    • Fácil de configurar
    • Nos ayuda a evadir ataques DoS bloqueando direcciones IP o URL temporalmente
    • Podemos bloquear si:
      • Una solicitud hecha a la misma página X veces por segundo de desde un mismo origen
      • Mas de X solicitudes concurrentes por segundo son hechas
      • Se puede comunicar con un firewall o un router y ejecutar comandos
  • 12. mod_security
    • Muy poderoso
    • Es un firewall personal de nuestra aplicación
    • Configuración detallada, requiere de muchas pruebas
    • Utilizar en la medida de lo posible cuando se corran aplicaciones en el servidor
    • Características:
      • Filtra las peticiones antes que apache
      • Filtra incluso SSL
      • Aplicación de reglas basadas en expresiones regulares y capacidad de logs (bitácoras)
  • 13. mod_ssl
    • Usarlo obligatoriamente
    • Es sencillo de configurar
    • Hace que la comunicación ente el servidor y el cliente se haga de manera cifrada
    • Se basa en el intercambio de certificados digitales (PKI)
    • Nos protege de ataques de sniffers y previene el MITM
    • Requiere que el certificado sea firmado por una entidad certificadora ($)
  • 14. Configuración de PHP
    • Nunca dejar las configuraciones por defecto en versiones menores a la 4.8
    • Utilizar siempre las nuevas versiones estables (Rama 5)
    • Ampliamente recomendable revisar las configuraciones por defecto, algunas vulnerabilidades pueden ser explotadas
    • Evitar en la medida de lo posible la ejecución de comandos del sistema operativo
  • 15. Configuraciones recomendadas
    • display_errors = Off
    • log_errors = On
    • error_reporting = E_ALL
    • session.gc_maxlifetime = 600 (10 mins)
    • magic_quotes_gpc = Off
    • register_globals = Off
    • safe_mode = On
    • safe_mode_gid = On
  • 16. Configuraciones recomendadas
    • allow_url_fopen = Off
    • allow_url_include = Off
    • open_basedir = /ruta
    • short_open_tag = Off
  • 17. Seguridad en el desarrollo
  • 18. Vulnerabilidades en desarrollos en PHP
    • Ejecución Remota de Código (Remote Code Execution)
    • Cross-site scripting (XSS)
    • SQL Injection
    • Ataques al sistema de archivos
  • 19. Ejecución Remota de Código
    • Afecta a las aplicaciones que aceptan nombres de archivos por parte del usuario cuando el sitio web maneja el ingreso y la inclusión de archivos y URLs sin chequeo previo.
    • Las causas de este problemas son:
    • Deficiente validacion antes de invocar los archivos con
      • fopen
      • require
      • include
  • 20. Cross-site scripting (XSS)
    • Algunas recomendaciones
    • Verificar que todos los parámetros en la aplicación sean validados y/o
    • encodeados antes de ser incluídos en la página HTML
    • La mejor protección para XSS es una combinación de validación
    • “ whitelist” y un encodeo apropiado de todos los datos de salida.
    • htmlspecialchars() para convertir los caracteres “, &, < y > en &amp; “
    • &lt; y &gt;. (PHP tiene otra función htmlentities() que convierte todos los
    • caracteres que tienen entidades equivalentes HTML)
  • 21. Cross-site scripting (XSS)
    • echo '<td>';
    • echo htmlspecialchars($unaFila['mensaje']);
    • echo '</td>'; ...
    • La aplicación no debería depender de register_globals
  • 22. SQL Injection
    • Validar datos antes de usarlos en queries SQL dinámicos
    • Preferir validación positiva a validación de casos inválidos
    • Usar PDO (PHP Data Objects)
    • Usar declaraciones parametrizadas MySQLi’s
    • Al menos, usar funciones como mysql_real_escape_string()
    • OJO:
    • El uso de addslashes() no es suficiente.
    • magic quotes (eliminado en PHP6) da una falsa sensación de seguridad.
  • 23. Ataques al sistema de archivos
    • Upload Injection de archivos locales
    • Inclusión de archivo local (tal como /etc/passwd, archivos de configuración, o logs)
    • Manipulación de sesiones locales
    • La mayoría de los administradores del sitio corren PHP sin usuario (nobody) bajo Apache, las vulnerabilidades sobre el sistema de archivos local afectan a todos los usuarios dentro de un host simple.
  • 24. ¿Preguntas? Iván Rico - @7th_sign Jesus Reyna - @jgreyna PHPmx : http://phpmexico.mx/