Las entradas de la aplicación
son uno de los medios más comunes
para vulnerarla.
Las estructuras condicionales generalmente se utilizan
para definir el comportamiento del sistema ante una entrada del usuario.
En otras palabras, permite la toma de decisiones.
Cuando se utilizan estructuras condicionales
es necesario definir escenarios seguros para todos los casos,
aún para los casos no contemplados.
Esto evita que usuarios maliciosos
se aprovechen de escenarios no contemplados por la aplicación
para realizar un ataque a la misma.
En cada estructura condicional empleada en una aplicación PL/SQL,
se recomienda contemplar todos los posibles escenarios.
Para ello debemos seguir el siguiente criterio:
En el siguiente ejemplo,
se muestra como validar las posibles opciones
para la estructura condicional IF-THEN.
Para ello debemos seguir el siguiente procedimiento:
-
Creamos la función en la que utilizaremos la estructura condicional.
En este caso será InconmeLevel.
Esta función se encarga
de recibir y clasificar los ingresos mensuales
de una lista de empleados.
El código se muestra a continuación:
Uso adecuado de IF-THEN en PL/SQL
CREATE OR REPLACE Function IncomeLevel
( name_in IN varchar2 )
RETURN varchar2
IS
monthly_value number(6);
ILevel varchar2(20);
cursor c1 is
select monthly_income
from employees
where name = name_in;
BEGIN
open c1;
fetch c1 into monthly_value;
close c1;
-
Definimos los rangos de entrada válidos,
y el procedimiento a realizar en cada rango.
IF
monthly_value <= 4000 THEN
ILevel := 'Low Income';
ELSIF
monthly_value > 4000 and monthly_value <= 7000 THEN
ILevel := 'Avg Income';
ELSIF
monthly_value > 7000 and monthly_value <= 15000 THEN
ILevel := 'Moderate Income';
-
Finalmente agregamos el escenario por defecto ELSE
para verificar opciones no consideradas.
De esta manera incluimos cualquier otra entrada no válida,
de tal forma que no se genere un error en la aplicación.
ELSE
ILevel := 'High Income';
END IF;
RETURN ILevel;
END;
Para la sentencia condicional CASE realizamos un proceso similar
al mostrado anteriormente.
-
Iniciamos definiendo la variable que evaluaremos con la sentencia CASE.
En este caso evaluaremos una variable asociada a una calificación.
Uso adecuado de CASE en PL/SQL
DECLARE
degrees CHAR (1);
BEGIN
degrees: = ' B ';
-
Definimos las calificaciones válidos,
así como los procedimientos a realizar en cada caso.
Las calificaciones válidas serán A , B , C , D y F.
CASE degrees
WHEN ' A ' THEN DBMS_OUTPUT.PUT_LINE (' Excellent ');
WHEN ' B ' THEN DBMS_OUTPUT.PUT_LINE (' Very Good ');
WHEN ' C ' THEN DBMS_OUTPUT.PUT_LINE (' Good ');
WHEN ' D ' THEN DBMS_OUTPUT.PUT_LINE (' Fair ');
WHEN ' F ' THEN DBMS_OUTPUT.PUT_LINE (' Poor ');
-
Finalmente agregamos la sentencia ELSE antes de END CASE.
Allí definiremos el mensaje de error que se mostrará
cuando se ingresa una entrada no valida.
ELSE DBMS_OUTPUT.PUT_LINE (' No such degrees ');
END CASE;
END;
De esta forma abarcamos todas las opciones posibles,
evitando fallos o comportamientos no deseados
ocasionados por una entrada inválida.