Seguridad en aplicaciones realizadas con Awe
Arquitectura
Awe es un framework de servidor, donde toda la lógica de su aplicación, negocio y interfaz de usuario reside en el servidor. A diferencia de los frameworks orientados a cliente, las aplicaciones Awe nunca exponen su código al navegador donde las vulnerabilidades pueden ser aprovechadas por un atacante.
Utiliza Spring Security
para gestionar y configurar todos los aspectos relacionados con este tema.
Bibliotecas de terceros
AWE actualiza constantemente las dependencias a librerías de terceros cuando se liberan parches de seguridad para ellas. When necessary, a new maintenance version of Awe is created to apply the fix. Furthermore, AWE has a public SonarCloud
server to be audited and constantly adapt to new security flaws. Puedes consultar aquí sobre el estado de serguridad de Awe.
Protección contra ataques CSRF
Todas las peticiones entre el cliente y el servidor incluyen un token CSRF específico de sesión de usuario. Awe handles all communication between the server and the client, so you do not need to remember to include the CSRF tokens manually.
Authorization: f910520d-28b8-4a2b-6e98-f32822bb1677
Sec-Fetch-Site: same-origin
X-XSRF-TOKEN: faad4d18-035a-4394-ab5f-be3bae2a1a09
Cookie: XSRF-TOKEN=faad4d18-035a-4394-ab5f-be3bae2a1a09; JSESSIONID=7177A217096E0BF9E4D47C967C74431D
Cross-Site Scripting (XSS)
Awe tiene protección integrada contra ataques de cross-site scripting (XSS). Awe converts all data to use HTML entities before the data is rendered in the user's browser.
The filtering is enabled by default, so adding the header typically just ensures it is enabled and instructs the browser what to do when a XSS attack is detected.
X-XSS-Protection=1; mode=block
Autenticación y autorización
Awe te permite elegir qué sistema de autenticación y autorización quieres usar, en lugar de definir uno específico. Awe is fully compatible with the most used security solutions in the Spring Boot ecosystem like In memory
, Database
, LDAP
, OAuth
, Oauth2
, 2FA
...
Spring Security en Awe
Awe proporciona beans
de configuración para gestionar la seguridad en su aplicación. Puede usarlos o sobrescribirlos y crear su método de autenticación personalizado. La configuración de seguridad está en las clases SecurityConfig
y AWEScreenSecurityAdapter
, donde puede seleccionar el método de autenticación que desee.
################################################
# Authentication
################################################
# Authentication mode (ldap | bbdd | in_memory | custom)
awe.security.auth-mode=bbdd
################################################
# Custom authentication
################################################
#Provider class beans, separated by comma for multiple providers.
awe.security.auth-custom-providers=
Siempre puede crear su propia clase de configuración de seguridad web extendiendo WebSecurityConfigurerAdapter
.
@Configuration
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {
/**
* Spring security configuration
*
* @param http Http security object
* @throws Exception Configure error
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// Your custom configuration
}
}
SSL y HTTPS
Awe recomienda siempre a los desarrolladores que establezcan endpoints
seguros y ejecuten toda la comunicación exclusivamente bajo HTTPS. Awe funciona directamente con HTTPS sin necesidad de que el desarrollador deba configurar nada en su código de aplicación. Por favor, consulte la documentación de su contenedor servlet para obtener detalles sobre cómo configurar HTTPS en su servidor.
Validación de datos
En las aplicaciones desarrolladas con Awe, el API de enlace de datos soporta la validación de datos en el servidor, que no puede ser sobrepasado por ataques en el lado del cliente. However, awe has client-side validation action to do a double check and increase the responsiveness of the application, but the developer should be aware that these should be used purely for convenience, since they are easily circumvented in the browser. Además, el desarrollador es libre de usar cualquier API de Java para validar los datos, incluyendo la conexión a servicios externos. También hay una integración con el estándar de validación de Bean de Java (JSR 303
).
Inyección SQL
Awe is a backend-agnostic UI framework, it doesn’t directly deal with backend access; instead, it uses a backend framework (e.g. Spring Data) to manage this. Awe proporciona mitigación para inyección SQL usando técnicas como Consultas Parameterizadas con QueryDSL. Utilizar internamente PreparedStatement
y limpieza de datos de entrada.
QCustomer customer = new QCustomer("Foo");
SQLTemplates dialect = new HSQLDBTemplates(); // SQL-dialect
SQLQuery query = new SQLQueryImpl(connection, dialect);
List<String> lastNames = query.from(customer)
.where(customer.firstName.eq("Foo"))
.list(customer.lastName);
SELECT c.last_name FROM customer c WHERE c.first_name = 'Foo'
Autenticación de dos factores (2FA)
Recientemente, hemos desarrollado un nuevo sistema de autenticación de dos factores basado en aplicaciones de autenticación como Google Authenticator.
Hay tres maneras de gestionar esta autenticación de dos factores en AWE basada en la propiedad awe.totp.security.enabled
:
disabled
: La autenticación de doble factor está deshabilitada y no pedirá un código temporal de acceso.optional
: El usuario puede habilitar autenticación de doble factor en la pantalla de configuración y el código temporal será preguntado al iniciar sesión.
force
: Al iniciar sesión, si el usuario no ha habilitado la autenticación de dos factores, aparecerá una pantalla con el código QR para forzar al usuario a habilitar la autenticación de dos factores. Después de esa pantalla, se pedirá al usuario el código temporal basado en el código secreto previamente generado.