PowerBuilder
Construyendo un administrador seguro de sesiones WebBrowser en PowerBuilder 2025 R2

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 controlado2awb_navegador.DevTools = TRUE3awb_navegador.PasswordAutosave = FALSE45// Producción6awb_navegador.DevTools = FALSE7awb_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) THEN2 of_registrar_operacion("NAVEGACIÓN BLOQUEADA")3 RETURN -14END 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 = TRUE3of_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_resultado23li_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.