Seguridad en el Desarrollo de Aplicaciones Web PHP Seguridad en el Desarrollo de Aplicaciones Web PHP Iván Rico - @7th_sig...
Conceptos
Qué es la seguridad? <ul><li>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, imp...
Necesidades de Seguridad  en una Aplicación Web <ul><li>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 </li></ul>
PHP en hechos <ul><li>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. </li></ul>
Importancia de la seguridad  en PHP <ul><li>PHP es y seguirá siendo extensamente usado para el desarrollo de Aplicaciones ...
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. </li></ul>
Seguridad en el ambiente
Aspectos a considerar <ul><li>Quién debe de tener acceso físico a los servidores?
Quién debe de tener acceso mediante shell?
Upcoming SlideShare
Loading in …5
×

[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

2,097 views

Published on

presentación utilizada en la plática de Seguridad en el Desarrollo de Aplicaciones Web PHP impartida por Jesus Reyna e Iván Rico en el flisol 2011 Mty NL México

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,097
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
70
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

[Flisol2011] Seguridad en el Desarrollo de Aplicaciones Web PHP

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

×