The Open Web Application Security Project (OWASP) es una comunidad en línea que produce artículos, metodologías, documentación, herramientas y tecnologías de forma gratuita en el campo de la seguridad de aplicaciones web. En particular, han publicado el
OWASP Top 10
, que describe en detalle las principales amenazas contra las aplicaciones web.
En este artículo confrontaremos el documento con las responsabilidades del desarrollador ABAP en la programación de interfaces de usuario seguras. Hay algunas reglas simples que todo programador ABAP debería conocer.
Las siguientes secciones describen ejemplos de diferentes vulnerabilidades en la interfaz de usuario de aplicaciones web y explican cómo prevenirlas con una programación segura. El problema con las aplicaciones web es que deseas que los usuarios visiten tu sitio e interactúen con la aplicación. Si el usuario realiza entradas inesperadas, un atacante podría hacer que el servidor o el cliente/navegador realicen acciones no deseadas. Por lo tanto, la primera pauta para desarrollar una aplicación web segura es:
Nunca confíes en ninguna información proveniente del exterior y nunca asumas nada al respecto.
Validación de entrada
Siempre que el software procese una entrada, debe validarse. Esto garantiza una alta calidad de datos y evita entradas inesperadas. La validación adecuada de la entrada debe constar de 6 pasos:
Paso 1: Verificación de existencia y longitud
Paso 2: Canonicalización
El contenido de la variable de entrada se transforma en su representación más simple y más corta.
Paso 3: Verificación de tipo
Paso 4: Verificación de rango
Paso 5: Filtro de lista blanca
La lista blanca es la tabla que contiene elementos permitidos.
TYPES whitelist TYPE HASHED TABLE OF string
WITH UNIQUE KEY table_line.
DATA(whitelist_name) = VALUE whitelist( ( `APPLE` ) ( `ORANGE` ) ( `PEACH` ) ).
PARAMETERS p_input TYPE string.
IF NOT line_exists( whitelist_name[ table_line = p_input ] ).
cl_demo_output=>write( `Solo se permiten los siguientes elementos:` ).
cl_demo_output=>display( whitelist_name[] ).
ENDIF.
Paso 6: Filtro de lista negra
La lista negra es lo opuesto a una lista blanca y contiene elementos que no están permitidos.
TYPES blacklist TYPE HASHED TABLE OF string
WITH UNIQUE KEY table_line.
DATA(blacklist_name) = VALUE blacklist( ( `APPLE` ) ( `ORANGE` ) ( `PEACH` )