PowerBuilder

Construyendo un administrador seguro de sesiones WebBrowser en PowerBuilder 2025 R2

AutorLuis Avilan
Publicado
Construyendo un administrador seguro de sesiones WebBrowser en PowerBuilder 2025 R2, artículo de Luis Avilan
PB

0 visualizaciones

Demo técnico de PowerBuilder 2025 R2

Integrar dashboards, portales internos, flujos OAuth o aplicaciones JavaScript dentro de PowerBuilder aporta una experiencia moderna, pero también introduce un nuevo límite de seguridad. Este demo muestra cómo controlar ese límite mediante perfiles por ambiente, navegación autorizada y eliminación completa de datos de sesión.

El problema de seguridad

Un cierre de sesión visual no garantiza que el navegador embebido haya olvidado al usuario. Cookies persistentes, Local Storage, Session Storage, IndexedDB, caché y contraseñas guardadas pueden sobrevivir al logout del portal. En una terminal compartida, un kiosco o una aplicación médica, esa persistencia puede exponer información a la siguiente persona que utilice el equipo.

También existe un riesgo operativo: si las herramientas de desarrollo permanecen activas en producción, un usuario puede inspeccionar el DOM, revisar solicitudes de red o ejecutar JavaScript dentro del contenido embebido.

La ventana muestra el perfil activo, el estado de DevTools, PasswordAutosave, la sesión, la bitácora y el portal empresarial.

Arquitectura del demo

La separación evita scripts visuales extensos. La ventana conoce el flujo de interacción, mientras el NVO aplica las reglas que pueden reutilizarse en otras ventanas del proyecto.

Perfiles de desarrollo y producción

PowerBuilder 2025 R2 permite controlar las herramientas de desarrollo y la oferta de guardado de contraseñas mediante las propiedades DevTools y PasswordAutosave.

1// Desarrollo controlado
2awb_navegador.DevTools = TRUE
3awb_navegador.PasswordAutosave = FALSE
4
5// Producción
6awb_navegador.DevTools = FALSE
7awb_navegador.PasswordAutosave = FALSE

El método of_configurar_perfil fuerza ambas propiedades a FALSE cuando el ambiente es Producción. De esta forma, una selección permisiva en la interfaz no puede debilitar accidentalmente el perfil productivo.

Navegación autorizada y dirección lógica

La barra del demo muestra https://portal.empresa.local/inicio, no una ruta física del equipo. Antes de navegar, of_es_url_permitida compara la dirección normalizada con la lista de dominios autorizados. Un intento de abrir un dominio externo se bloquea y queda registrado en la bitácora.

1IF NOT inv_seguridad.of_es_url_permitida(ls_direccion) THEN
2 of_registrar_operacion("NAVEGACIÓN BLOQUEADA")
3 RETURN -1
4END IF

Para mantener el demo portable, of_obtener_directorio_aplicacion obtiene la carpeta del ejecutable mediante GetModuleFileNameW. Después, of_buscar_portal_local revisa ubicaciones relativas al ejecutable y al directorio actual. No existe ninguna ruta absoluta del equipo de desarrollo dentro de los fuentes.

Autenticación visible y datos persistentes

Al iniciar sesión, PowerBuilder ejecuta iniciarSesionDemo() mediante EvaluateJavascriptAsync. El portal crea deliberadamente tres tipos de datos: una cookie, una entrada en Local Storage y otra en Session Storage. El indicador de la ventana y la bitácora cambian al mismo tiempo para mostrar que la sesión existe tanto en el contenido web como en el host.

1wb_portal.EvaluateJavascriptAsync("iniciarSesionDemo()")
2ib_sesion_activa = TRUE
3of_actualizar_indicadores()
4of_registrar_operacion("Sesión iniciada")

Logout seguro con ClearBrowsingData

La ayuda instalada de PowerBuilder 2025 R2 documenta la siguiente firma:

1Integer WebBrowser.ClearBrowsingData(BrowsingDataKinds datakinds)

Retorna 1 cuando la operación termina correctamente y -1 cuando falla. El demo utiliza BrowsingDataKindsAll! para ejecutar una limpieza integral:

1Integer li_resultado
2
3li_resultado = awb_navegador.ClearBrowsingData(BrowsingDataKindsAll!)
4RETURN li_resultado

Opciones disponibles

Secuencia completa de cierre

• El portal cambia visualmente a estado cerrado mediante cerrarSesionDemo().

• PowerBuilder restablece la variable de autenticación.

• El NVO ejecuta ClearBrowsingData(BrowsingDataKindsAll!).

• Los indicadores se actualizan a SESIÓN CERRADA.

• La bitácora registra el éxito o el error de la limpieza.

• Una autenticación posterior comienza como una sesión nueva.

Escenarios de prueba

• DevTools habilitado en Desarrollo y bloqueado en Producción.

• PasswordAutosave bloqueado por el perfil productivo.

• Creación y eliminación de cookies y almacenamiento web.

• Intento de navegación hacia un dominio no autorizado.

• Apertura de una sesión nueva después del logout.

• Ejecución desde otra carpeta o equipo sin modificar rutas.

Consideraciones para producción

Este patrón resulta especialmente útil en sistemas bancarios, portales médicos, aplicaciones de recursos humanos, ERP con dashboards web, terminales compartidas, kioscos e integraciones OAuth.

Conclusión

El control WebBrowser puede integrarse de forma segura cuando PowerBuilder asume la responsabilidad del ciclo de vida de la sesión. Una arquitectura con reglas centralizadas, perfiles por ambiente, lista de dominios permitidos y limpieza explícita convierte un navegador embebido en un componente empresarial controlado y auditable.