#Seguridad

0 Seguidores · 45 Publicaciones

La seguridad en TI es la protección de los sistemas informáticos contra el robo y los daños a su hardware, software o información, así como contra las interrupciones o el uso indebido de los servicios prestados por ellos.

Ver la documentación de InterSystems sobre seguridad.

Artículo Alberto Fuentes · abr 15, 2021 4m read

Hola a todos! Comentamos hoy una entrada de Timothy Leavitt cuyo equipo (Application Services en InterSystems - encargado de desarrollar y mantener muchas de nuestras aplicaciones internas, y proporcionar herramientas y prácticas recomendadas a otras aplicaciones departamentales), durante el último año, se embarcó en un viaje hacia el desarrollo de interfaces de usuario basadas en Angular/REST, para las aplicaciones existentes construidas originalmente con CSP y/o Zen. Esto ha planteado un interesante reto, que os puede resultar familiar a muchos de vosotros: desarrollar nuevas APIs REST para los modelos de datos y la lógica empresarial existentes.

Como parte de este proceso, creamos un nuevo framework para las APIs REST, que ha sido muy útil para nosotros mismos. Ya está disponible en Open Exchange en https://openexchange.intersystems.com/package/apps-rest. Creo que habrá más artículos sobre esto próximamente pero, mientras tanto, hay buenos tutoriales en la documentación del proyecto en GitHub (https://github.com/intersystems/apps-rest).

Como introducción, aquí se encuentran algunos de nuestros objetivos e intenciones de diseño. Todavía no se han realizado todos, ¡pero vamos por buen camino!

Desarrollo y despliegue rápidos

Nuestro enfoque REST debería proporcionar el mismo inicio rápido para el desarrollo de aplicaciones que Zen, ya que resuelve problemas comunes y al mismo tiempo proporciona flexibilidad para los casos de uso específicos de las aplicaciones.

  • Exponer un nuevo recurso para el acceso a REST debería ser tan fácil como exponerlo a un DataModel de Zen.
  • La incorporación/modificación de recursos REST debería involucrar cambios en el nivel al que se accede.
  • La exposición de una clase persistente a través de REST debería llevarse a cabo por herencia y sobre-escrituras de métodos mínimos, pero también debería haber soporte para las funcionalidades equivalentes de programación manual (esto es similar a %ZEN.DataModel.Adaptor y a %ZEN.DataModel.ObjectDataModel).
  • Los patrones comunes de gestión/notificación de errores, serialización/deserialización, validación, etc., no deberían necesitar ser re-implementados para cada recurso en cada aplicación.
  • El soporte para las consultas, el filtrado y la clasificación de los datos de SQL, así como las funciones de búsqueda avanzada y la paginación, deberían estar incorporadas, en vez de que se vuelvan a implementar para cada aplicación.
  • Debería ser fácil desarrollar APIs REST para los métodos de clase y consultas de clase de la API/librería existente, así como a nivel de objeto (CRUD).

Seguridad

La seguridad es una decisión tomada en consecuencia en el momento de diseñar/implementar en vez de una idea de última hora.

  • Cuando las capacidades REST se obtienen por herencia de clases, el comportamiento por defecto debería ser NO proporcionar acceso al recurso, hasta que el desarrollador especifique activamente quién debe recibir acceso y bajo qué condiciones.
  • Las implementaciones estandarizadas de las funciones relacionadas con SQL minimizan la superficie potencial para los ataques de inyección SQL.
  • El diseño debe tener en cuenta el top 10 de la API OWASP (consulta: https://owasp.org/www-project-api-security)

Mantenimiento

La uniformidad del diseño de aplicaciones es una poderosa herramienta para el ecosistema de aplicaciones en una empresa.

  • En vez de acumular un conjunto de API REST de diversa índole e implementaciones programadas de forma manual, deberíamos tener APIs REST de aspecto similar en toda nuestra cartera. Esta uniformidad debería llevar a:
    • Técnicas de depuración comunes.
    • Técnicas de prueba comunes.
    • Técnicas comunes de interfaz de usuario para conectarse a las APIs REST.
    • Facilidad para desarrollar aplicaciones compuestas que accedan a varias APIs.
  • El conjunto de endpoints y el formato de las representaciones de objetos proporcionadas/aceptadas por medio de REST debería estar bien definido, de manera que podamos generar automáticamente la documentación de la API (por ejemplo, Swagger/OpenAPI) basada en estos endpoints.
  • Con base en la documentación estándar de la API, deberíamos ser capaces de generar partes del código del cliente (por ejemplo, clases de typescript correspondientes a nuestras representaciones REST) con la ayuda de herramientas de terceros/estándares de la industria.
2
0 214
Artículo Ricardo Paiva · jun 9, 2022 4m read

Hola desarrolladores,

Estoy seguro de que os habéis encontrado esta situación: necesito autenticar los usuarios - que pueden acceder a la instancia de InterSystems IRIS (for Health) o Health Connect – mediante LDAP (Active Directory u OpenLDAP). En este artículos quiero compartir con vosotros lo sencillo que es la autenticación/integración mediante LDAP. Crearemos una configuración mínima de manera a autenticar los usuarios mediante consulta a OpenLDAP.

0
0 336
Artículo Dmitry Maslennikov · mayo 16, 2022 3m read

¿Cómo podemos comprobar si una contraseña es suficientemente segura, para evitar que sea descifrada? ¿Y cómo podemos crear una contraseña segura?

He desarrollado una herramienta que puede ayudar con esto. Puedes encontrarla en OpenExchange. Instálala con zpm

zpm "install passwords-tool"

Este módulo instalará solo una clase caretdev.Passwords, que contiene algunos métodos que pueden ayudarte.

Contraseña segura

Para crear una contraseña segura, normalmente es suficiente con usar letras en mayúsculas y minúsculas, números y símbolos especiales, y que tenga al menos 8 caracteres. 

0
0 323
Artículo Alberto Fuentes · abr 5, 2022 2m read

¿Te suenan OAuth2 / OpenID Connect pero no estás seguro de cómo se utilizan? ¿Has necesitado implementar alguna vez Single Sign On, servicios web seguros basados en tokens? ¿Has necesitado incorporar autenticación / autorización a tus aplicaciones web o servicios y no sabías por dónde empezar?

¿Que te parecería poder configurar paso a paso un servidor de autorización, un cliente y un servidor de recursos? Aquí tenéis un ejemplo donde se configuran instancias Intersystems IRIS para actuar como cada uno de esos roles de OAuth2.

Una breve introducción

Autenticación es el proceso de verificar que los usuarios son quienes dicen ser. Autorización es el proceso de otorgar a esos usuarios permisos para acceder a recursos.

OAuth2 es un framework de autorización. OpenID Connect es una extensión de OAuth2 para gestionar autenticación.

En OAuth2, existen diferentes roles:

  • Propietario de los recursos (resource owner) - normalmente un usuario.
  • Servidor de recursos (resource server) - un servidor que alberga los datos o servicios protegidos.
  • Cliente (client) - aplicación que solicita acceso limitado al servidor de recursos (e.g. una aplicación web).
  • Servidor de autorización (authorization server) - servidor responsable de generar tokens de acceso con los que el cliente puede acceder al servidor de recursos.

Además, OAuth2 utiliza scopes o ámbitos como mecanismo para limitar acceso. Un cliente puede solicitar acceso a uno o varios scopes.

Y por último, OAuth2 soporta diferentes tipos de autorizaciones (grant types). Cada tipo de autorización puede tener un flujo diferente y ser más o menos indicada para un determinado tipo de escenario que nos interese montar.

## ¿Qué podrás probar en en el ejemplo?

Probarás dos escenarios. Uno con el tipo de autorización Authorization Code y otro con Client Credentials. Tendrás 3 instancias de InterSystems IRIS que configurarás para actuar como cada de uno de los diferentes roles.

### Authorization code

Authorization code es un tipo de autorización indicada para escenarios de aplicaciones web / móviles.

image

En el ejemplo, configurarás lo necesario para tener un cliente web que accede a recursos protegidos utilizando un token de acceso.

image

Client Credentials

Client credentials es otro tipo de autorización, se utiliza típicamente cuando un cliente quiere acceder a recursos directamente en su nombre (y no en el de un usuario).

image

En el ejemplo, lo utilizarás directamente desde Postman.

image

2
0 350
Artículo Javier Lorenzo Mesa · oct 26, 2021 3m read

En la Parte 1 empezamos a trabajar en un modelo de seguridad para DeepSee y creamos un tipo de usuario con los privilegios habituales de los usuarios finales. En esta parte, crearemos un segundo tipo de usuario con permiso para editar y crear tablas dinámicas y paneles de control en DeepSee. 


Cómo conceder acceso completo a Analyzer y a los paneles de control

Cómo crear un rol en DSPowerUser

Según la documentación (consulta las filas de las tareas "Full access to the Analyzer or Mini Analyzer" (Acceso completo a Analyzer o al Mini Analyzer) y "Creating a new Dashboard" (Cómo crear un nuevo panel de control) que se encuentran en la tabla) es necesario tener permisos de tipo USE en los recursos %DeepSee_AnalyzerEdit y %DeepSee_Portal para conceder acceso completo a Analyzer, y permisos USE en el recurso %DeepSee_PortalEdit para crear y editar los paneles de control. Ten en cuenta que el recurso %DeepSee_Analyzer no es necesario cuando ya se concedió el permiso al recurso %DeepSee_AnalyzerEdit. 
Crea un rol DSPowerUser que incluya los siguientes recursos con permisos USE: 
 

RecursoPermiso
%DeepSee_AnalyzerEditUSE
%DeepSee_PortalUSE
%DeepSee_PortalEditUSE
%DB_APP-DATARW

Cómo crear Poweruser

En la página Users (Usuarios) > selecciona la opción Create New User (Crear nuevo usuario), crea un Poweruser con el rol DSUser asignado, como se muestra en la siguiente captura de pantalla:  

Probando Poweruser

Abre una ventana de incógnito/privada en tu navegador e inicia sesión como Poweruser. La pestaña Architect de la sección DeepSee aún debería aparecer en color gris. Ve a Analyzer y User Portal, y confirma que Poweruser puede ver, crear y editar tablas dinámicas y paneles de control. 

Consejo: Para no tener que entrar en el SMP varias veces con el mismo usuario, haz alguna de las siguientes cosas:

  • Usa el mismo GroupId en las aplicaciones web. Para todas las aplicaciones web a las que tenga acceso el usuario, utiliza el mismo Id en la página Web Applications (Aplicaciones web) > tu aplicación web > campo Group By ID.
  • Habilita la creación de cookies para el CSP y la cookie de inicio de sesión en las aplicaciones web correspondientes: SMP > System Administration (Administración del sistema) > Security (Seguridad) > System Security (Seguridad del sistema) > Authentication/CSP Session Options (Opciones de autenticación/sesión CSP) > marca la opción Allow creation of Login Cookies (Permitir la creación de cookies de inicio de sesión). Web Applications (Aplicaciones web) > Selecciona una aplicación web > Marca Login cookie (cookie de inicio de sesión). Haz esto para todas las aplicaciones web a las que tenga acceso el usuario. 

Sugiero utilizar alguno de estos métodos para las aplicaciones web que estén asociadas con el namespace (en nuestro ejemplo /csp/app/) para evitar iniciar sesión cuando se intente acceder a las funcionalidades de DeepSee en ese namespace. Si ves que al usuario se le pide iniciar sesión de nuevo, busca la aplicación web desde la URL o desde el Registro de auditoría, y sigue alguno de los dos métodos indicados anteriormente.


En la Parte 3 crearemos otro tipo de usuario, al que otorgaremos los permisos que generalmente necesita un administrador/desarrollador en Analytics.

0
0 119
Artículo Javier Lorenzo Mesa · jul 16, 2021 5m read

Tengo algunos modelos analíticos y numerosos paneles de control, y estoy listo para implementarlos en nuestros usuarios finales y administradores. ¿Cómo configurar DeepSee para que los usuarios no alteren las áreas de los demás y se les restrinja el uso de funciones específicas para los desarrolladores?

1
0 157
Artículo Mathew Lambert · mayo 7, 2020 4m read

¡Hola Comunidad!

Hace un par de días, un cliente me comunicó su intención de mejorar su aplicación legacy existente, que usa Servicios Web SOAP, por lo que comparte la misma autorización con su nueva API de aplicación basada en REST. Como su nueva aplicación usa OAuth2, el desafío estaba claro: cómo pasar un token de acceso con una solicitud SOAP al servidor.

Tras Googlear un poco, descubrí que una de las formas posibles de hacer esto era agregar un elemento de encabezado adicional al SOAP envelope y luego asegurarse de que la implementación del Webservice haga lo necesario para validar el token de acceso.

0
0 1351
Artículo Ricardo Paiva · feb 6, 2020 15m read

Este artículo, y los dos siguientes de la serie, se conciben como una guía para los usuarios, los desarrolladores o para los administradores de sistemas que necesiten trabajar con la estructura de OAuth 2.0 (conocido también por simplicidad como OAUTH) en aplicaciones que estén basadas en los productos de InterSystems.

0
0 1584
Artículo Ricardo Paiva · dic 16, 2019 7m read

¡Hola a tod@s!

Al usar Studio, ODBC o una conexión de terminal a Caché o Ensemble, quizás se haya preguntado cómo podría implementar una conexión segura. Una opción es agregar TLS (también conocido como SSL) a su conexión. Las aplicaciones cliente de Caché (TELNET, ODBC y Studio) todas entienden cómo agregar TLS a la conexión. Tan solo es necesario configurarlas para hacerlo.

Configurar esos clientes es más fácil en la versión 2015.1 y posteriores. A continuación discutiré este nuevo método. Si ya usa el viejo método, este seguirá funcionando, pero le recomiendo considerar pasarse al nuevo.

0
0 509