?SOURCE $SYSTEM.SYSTEM.EXTDECS (INITIALIZER)
Usar estructuras condicionales contemplando todos los escenarios posibles y valores por defecto en TAL.
A continuación se describe las circunstancias bajo las cuales la siguiente solución tiene sentido:
La validación de entradas es un proceso esencial en toda aplicación. Esta validación es aplicable a cualquier lenguaje de programación. Para el caso de TAL podemos mejorar la seguridad de nuestra aplicación, al agregar escenarios por defecto para cada uno de los casos posibles. Para ello utilizamos los condicionales propios del lenguaje. En cada estructura condicional empleada en una aplicación TAL, se recomienda contemplar todos los posibles escenarios, como se muestra a continuación:
Iniciamos la aplicación copiando la sección INITIALIZER del archivo EXTDECS:
?SOURCE $SYSTEM.SYSTEM.EXTDECS (INITIALIZER)
En el procedimiento principal encontramos la lógica del programa:
PROC fluidproc MAIN;
Declaramos las variables de ejemplo: id, role y constantes que indican si el usuario es anonymous (anónimo), guest (invitado), restricted (restringido), admin (administrador) o root (super administrador):
BEGIN
INT id;
INT role;
LITERAL anonymous, guest, restricted, admin, root;
Los posibles valores que puede tomar id y su respectivo rol son:
ID | Rol |
---|---|
0 - 10 |
Anonymous. |
11 - 20 |
Guest. |
21 - 50 |
Restricted. |
51 - 90 |
Admin. |
98 - 99 |
root. |
Inicializamos el programa. Para ello ejecutamos la sentencia INITIALIZER:
CALL INITIALIZER;
Establecemos un id arbitrario:
id := 100;
La palabra clave CASE es usada para ejecutar cierto código dependiendo del contenido de una variable, en este caso, la variable id:
CASE id OF
Si el contenido de la variable id se encuentra en el rango 0..10, significa que es anónimo:
BEGIN
0..10 -> role := anonymous;
De la misma manera se definen los demás roles, dependiendo del rango del id: Entre 11 y 20 es invitado, Entre 21 y 50 restringido, y así sucesivamente hasta llegar a super administrador, sólo con los ids 98 y 99:
11..20 -> role := guest;
21..50 -> role := restricted;
51..90 -> role := admin;
98, 99 -> role := root;
La sentencia OTHERWISE sirve para controlar escenarios no contemplados, si el id no se encuentra definido en las anteriores etiquetas, el valor que el rol toma por defecto es el de anónimo:
OTHERWISE -> role := anonymous;
END;
Si la sentencia OTHERWISE no es especificada y el valor no se encuentra en los valores anteriormente definidos, el programa arroja un error de ejecución como puede ser observado a continuación:
$SYSTEM fluidattacks 1> RUN fluidattacksP
ABENDED: 0,161
CPU time: 0:00:00.001
-1: Process trapped
TRAP NO=02: (UC.00) P=%000040 L=%000000 S=%000002
Debe usarse de igual manera la sentencia ELSE en el momento de usar condicionales. Note que para este ejemplo, si no tiene en cuenta la sentencia ELSE, el rol que toma el id 100 es el de super administrador, aún sabiendo que el valor 100 no está especificado:
IF id > 98 THEN
role := root
ELSE
role := anonymous;
END;
Copyright © 2021 Fluid Attacks, We hack your software. All rights reserved.