Security checks for all possible objects (Entities, Server Actions, Timers, Queries, etc.)
223
Views
5
Comments
New
Service Studio

It seems that OutSystems in recent years has not been evolving the built-in security mechanisms on the platform, and the technology is being left behind by some other platforms with better authorization controls, such as Mendix.

This idea intends to propose better authorization controls over all objects, not only screens.

Now, the platform only provides some real basic security mechanisms via roles, which can be attached to screens or manually used to be granted, checked, or revoked. The built-in screen role checks are quite useful, and they work as expected. However, there is a huge burden on the developers to manually implement role security checks in all logics. Besides, there is not much control over database entity access unless tenants are also used.

OutSystems developers working with "low-code" features usually do not have extensive knowledge of how to improve security beyond the limits of the basic features of the platform. OutSystems also promotes openly the idea that a developer is not required to have much technical knowledge, but security proves the opposite. It's a constant issue to find security vulnerabilities after the login, where developers build web-react client actions that pass parameters, and those parameters are easy to tamper with. They simply "forgot" to add role checks, and there's a brand new security breach. So easily achieved.

In the face of the Achilles' heel of the platform related to security, much of which is in the manual hands of developers, it's proposed a new security authorization model:

A. Short-term measures:

1. Extend role checkboxes (by default) for each server logic, query, entity, ability to run a timer or BPT, or any other action that communicates or runs within the server. Those objects could have roles' checks as the screens, so developers will easily check and apply controls over those objects, avoiding plenty of manual work and the vulnerability of forgetting a specific action. Besides, when a logic is copied, the copy should inherit the roles' checks, promoting security across the whole app being developed.

2. Extend the warning messages to verify if all objects have the proper roles applied. Otherwise, state how many artifacts have undefined or anonymous roles.

B. Long-term measures:

1. It seems the security via roles is very basic. It's suggested that the platform provide a new authorization model based on objects with the right to access and the level of access. It means it's not enough to have access to an entity; it also requires controlling which information can be accessed within that entity and the level of power, such as whether the user can only retrieve or view data, update, or delete it as previously authorized.

2. Improve client-side security by implementing a built-in model of authorization for client actions and improving, via cryptography or another means, how parameters are exposed.

Hi, 

I liked your idea, and will and some URLs of ideas that are also suggested by you. Could you share where Mendix is doing a better job at Security compared to OutSystems?

https://www.outsystems.com/ideas/10109/action-for-custom-server-side-check-for-permissions-for-a-screen-block/

https://www.outsystems.com/ideas/3681/role-authorisation-for-rest-api-methods/

Regards,

Daniel

Hi @Daniel Kuhlmann, thanks for the feedback.

 I will share here (as you ask) where Mendix is doing better:

1. Mendix has a security control by application and module: 

2. At the application's level you can setup the security for all modules and see if all modules security is completed. Besides, you can decide the level of security, setup the initial administrator of the tool, the application's user roles, a list of demo users which will be automatically created, the password policy,  among others. 

3. At a module's security, you can:

a. setup module's roles which will be linked to the application's roles:

b. setup the page's acess security level:

c. the access to microflows (similar to server actions in outsystems):

d. the access to nanoflows (similar to client actions in outsystems) - I didn't have any to be displayed:

e. the access (and level of access) to everyone of the entities you have and their attributes:

f. you can create XPath constraints to limit entity's data to only the data the users can access based on the relationship of the entities (e.g. if you a part of a department, then we can setup XPaths so you can have only data-access to the department you are part of, so the data will be automatically filtered): 

g. you can setup the access to datasets (similar to aggregates/advanced queries in OutSystems):

**For any new type of object you create in Mendix, there will be a new menu on the security pop-up, so you can setup the access and level of access to all the objects.**

Mendix also provides integration with external security providers via OIDC (Open ID Connect) that is a more reliable and up to date protocol for authentication/authorisation/SSO. OutSystems, as far as a I know, only provides by default the old SAML (that is also supported by Mendix). 

Thanks for the extensive feedback!

I'm all in favor of improving security capabilities. But be very careful with the Entity access way of working. The concept is great, but the Mendix implementation can have serious performance impact on medium to large application. It would be great if there is something like it in OS, but also a way to override it.

(Worked with mendix for 8 years, former Mendix MVP)

Hi @Kilian Croese , thanks for sharing your expertise, it's very welcome and nice to know you. 

I think when OutSystems designs a new security model, they should review the performance aspects you have mentioned. Maybe the entity's security checks can be disabled, if someone wants to design a more large application with a different security model. In this way, the built-in security model for entities can be an option, but I found it very important in the same way.