0150 como desarrollar_aplicaciones_seguras_con_gene_xus
Upcoming SlideShare
Loading in...5
×
 

0150 como desarrollar_aplicaciones_seguras_con_gene_xus

on

  • 1,173 views

 

Statistics

Views

Total Views
1,173
Views on SlideShare
1,011
Embed Views
162

Actions

Likes
0
Downloads
26
Comments
0

2 Embeds 162

http://www3.gxtechnical.com 160
http://www5.genexus.com 2

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • * Cuando hablamos de seguridad en la web podemos hablar de 2 grandes areas. * El servidor, que involucra al sistema operativo, Servidor WEB, Base de Datos, etc. * La aplicación, que es con la que el usuario interactúa. * Nosotros como desarrolladores la mayoría de las veces solo deberemos preocuparnos de la seguridad dentro de la aplicación.
  • La autenticación es el proceso por el cual demostramos ser quienes decimos ser.  Por ejemplo mediante el nombre de usuario y contraseña. Si suponemos que digo ser "Diego" y solo yo se cual es mi contraseña y la ingreso correctamente, el sistema comprobaráque yo realmente soy  "Diego". La autorización se produce luego de la autenticación y es el proceso por el cual obtenemos o no permisos para efectuar determinada acción, como puede ser acceder a ciertos datos.
  • ¿ Que cosas implica encargarme de la seguridad de mi aplicación ? Mantener la seguridad de mi aplicación implica en primer lugar crear un manejo de los permisos de usuarios de mi sistema. Será mas avanzado o mas básico según nuestras necesidades. Esto nos permitirá evitar que personas no autorizadas puedan acceder a nuestra aplicación. También nos permitirá diferenciar a los usuarios de nuestro sistema y asignar los diferentes niveles de acceso a la información que nuestra aplicación maneja y de esa manera autorizar o desautorizar a los usuarios a realizar determinadas acciones.
  • * No chequear que exista un usuario logueado en todas las pantallas de la aplicación.   * No validar los roles en cada pantalla (a veces lo que se hace simplemente es limitar el menú a los permisos pero luego a nivel de aplicación solo se controla el usuario)   * Confiar en que el usuario llega a las pantallas de mi aplicación siguiendo los links en ella y no escribiendo la URL directamente en el navegador                  Ej: Pongo un link a la pantalla de modificación de los datos del usuario a la que paso como parametro el ID del usuario logueado sin tener en cuenta que puedo escribir la URL del Link cambiando el código de usuario que se le pasa. * No usar las transacciones como parte de mi aplicación pero dejarlas accesibles y sin seguridad. (Escribiendo la URL en el navegador), esto permite acceso total a modificar la información existente en la base de datos de nuestra aplicación.   Tambien muchas veces dejamos accesibles los webpanels generados por los pattern (ej: WorkWith) pero no los usamos todos como parte de la aplicación.    
  • * No se pueden confiar en las validaciones que se ejecutan en el browser.  Olvidemonos por favor de hacer cosas como ocultar la barra de direcciones, poner javascript para que no pudan ver el código HTML de mi aplicación o cosas por el estilo. Continuando con lo dicho anteriormente debemos asegurarnos que las validaciones importantes se hagan del lado del servidor.  Los chequeos que se jecutan del lado del servidor son mucho mas fiables. En lo posible que sean exactamente antes de hacer la inserción o modificación de los datos y en caso que sea una consulta de datos, el mejor lugar para hacer los chequeos es el evento Refresh. Usar MD5, SHA1 o similar para la encriptación de contraseñas. De esta manera es imposible que ni siquiera teniendo acceso total a la base de datos y a la aplicación la contraseña pueda ser desencriptada.  También depende de cuan fuerte sea la contraseña del usuario, si es muy debil se puede descubrir mediante un ataque de fueza bruta. Tambien existen sitios que almacenan contraseñas encriptadas con MD5 generando una gran base de datos contra la cual luego se pueden comparar las contraseñas encriptadas.
  • * GeneXus tiene una propiedad a nivel de objeto que nos permite automaticamente encriptar los parametros que se pasan de un objeto a otro evitando que sean manipulables facilmente. Si lo encriptamos con la opción "SiteKey" la URL de los objetos no va a cambiar durante las diferentes sessiones, esto quiere decir por ejemplo que si la dirección queda guardada en el historial del navegador, luego voy a poder usar esa misma URL para acceder a un objeto pasandole los parametros que haya usado esa vez. En cambio si utilizo "SessionKey" los parametros son encriptados con una clave diferente en cada session por lo cual la URL cambia en cada session que iniciamos. * El objeto WebSession nos permite almacenar información * Se encarga de prevenir automaticamente de ataques de "SQL Injection"
  • * No se pueden confiar en las validaciones que se ejecutan en el browser.  Olvidemonos por favor de hacer cosas como ocultar la barra de direcciones, poner javascript para que no pudan ver el código HTML de mi aplicación o cosas por el estilo. Continuando con lo dicho anteriormente debemos asegurarnos que las validaciones importantes se hagan del lado del servidor.  Los chequeos que se jecutan del lado del servidor son mucho mas fiables. En lo posible que sean exactamente antes de hacer la inserción o modificación de los datos y en caso que sea una consulta de datos, el mejor lugar para hacer los chequeos es el evento Refresh. Usar MD5, SHA1 o similar para la encriptación de contraseñas. De esta manera es imposible que ni siquiera teniendo acceso total a la base de datos y a la aplicación la contraseña pueda ser desencriptada.  También depende de cuan fuerte sea la contraseña del usuario, si es muy debil se puede descubrir mediante un ataque de fueza bruta. Tambien existen sitios que almacenan contraseñas encriptadas con MD5 generando una gran base de datos contra la cual luego se pueden comparar las contraseñas encriptadas.

0150 como desarrollar_aplicaciones_seguras_con_gene_xus 0150 como desarrollar_aplicaciones_seguras_con_gene_xus Presentation Transcript

  • Cómo desarrollar aplicaciones seguras con GeneXus Diego Rostagnol - Universal ST - [email_address] Twitter: @elrosti Martín Oliveri – Artech
  • Dos áreas Servidor Aplicación
  • Autenticación <> Autorización
      • Autenticación : Es el proceso por el cual demostramos que somos quienes decimos ser.
      • Autorización : Se produce después de la Autenticación y es el proceso por el cual obtenemos o no permisos para efectuar una determinada acción.
  • ¿Que implica?
      • Crear un manejo de permisos de usuarios de mi sistema.
      • Evitar que personas no autorizadas puedan autenticarse ante mi aplicación.
      • Asegurar que los usuarios accedan solamente a los datos que que están autorizados a manipular.
  • Errores comunes
      • No controlar que exista un usuario logueado en todas las pantallas de la aplicación
      • No validar los roles en cada pantalla
      • Confiar en que el usuario llega a las pantallas de mi aplicación siguiendo los links en ella.
      • No usar las Transacciones o WebPanels como parte de mi aplicación pero quedan accesibles escribiendo la URL en el navegador.
      • Poner el código del usuario logueado en el form o pasarlo por parámetro
  • Consideraciones
      • No se puede confiar en las validaciones que ejecutan del lado del cliente. (Browser)
      • Las validaciones de los datos ingresados se deben hacer del lado del servidor.
      • Propiedades Visible y Enabled no aseguran que el valor de las variables o atributos no sea modificado.
      • No confiar en los registros cargados en las grillas.
  • ¿Cómo nos ayuda GeneXus?
      • Encriptación de parámetros (SiteKey y SessionKey).
      • Propiedad “Ajax Requests Security”
      • Objeto WebSession.
      • Se encarga de prevenir automáticamente ataques de tipo &quot;SQL Injection&quot;.
      • En las Transacciones, las reglas se ejecutan en el servidor y en el cliente
  • Buenas Prácticas
      • Usar MD5, SHA1 o similar para la encriptación de contraseñas (algoritmos de reducción criptográficos).
      • Obligar al usuario a usar contraseñas fuertes.
      • Solicitar nuevamente el ingreso de la contraseña al modificar datos sensibles de los usuarios o acciones críticas.
      • Mantener un log de inicio de sesiones que el usuario pueda ver.
      • Controlar los intentos de acceso
     
  • Preguntas:
      • ¿Que objetarían de lo mencionado anteriormente?
      • ¿Que practicas de seguridad utilizan?
      • ¿Que parámetros evalúan para decidir cuanto esfuerzo deben poner en la seguridad de su aplicación
      • ¿Que problemas de seguridad han encontrado en aplicaciones de terceros?