Estamos en medio de una migración de GX16 a GX18.
Un usuario nos reportó un problema, con links viejos que tenia en un QR (generado en GX16) que daba error al acceder a la aplicación en GX18.
El error que da es
403 - Forbidden: Access is denied.
Investigando el tema, encontramos que se cambió en el SAC 49927
SAC #49927: Se cambia la función de encriptación de parámetros para usar el alfabeto Base64 URL Safe |
|
Abstract | Se cambia el mecanismo de encriptación de parámetros (cuando se tiene Encrypt URL Parameters <> None). Se pasa a utilizar una función que retorna un string con caracteres del alfabeto Base64 URL Safe. Con esto se evita generar caracteres del alfabeto Base64 como la barra (/) o el signo de más (+).
|
|
Descripción Detallada
Hasta el momento la función de encriptación de parámetros generaba un string del alfabeto Base64. Esto incluye los caracteres:
62: / 63: +
Que el Query String de la URL (encriptada) venga con esos caracteres podría causar algunos problemas.
Por ejemplo el "+" es detectado por algunos firewalls como posible signo de OS command injection. La "/" cuando se generaban dos juntas (//) algunos módulos (URLRewirte) los sustituyen por una única barra (pensando que era un carácter de escape) y entonces podía presentarse un error 403 Forbidden con el generador C# (SAC #49924)
Se cambia entonces la función para utilizar un caracter del alfabeto Base64 URL and Filename Safe, donde los últimos dos caracteres se sustituyen por:
62: - (minus) 63: _ (underline)
------------------------------------------ Las pruebas GX16 a GX16.
Habíamos hecho pruebas de llamadas desde GX18 a GX18 y funcionaban bien.
No habiamos tenido en cuenta en nuestras pruebas las llamadas realizadas desde la aplicación vieja a la nueva.
La solución que encontramos fue renombrar el objeto referenciado y ponerle _v18 al final, y crear un objeto nuevo que solo reciba un string de parámetros, hace replaces para dejar la encriptacion como lo espera GeneXus 18 y llamar al otro objeto

|
WebPanel1
Parm(in:&ParmsEncriptados16)
Event Start
&ParmsEncriptado18 = CambioEncriptacion_16_a_18(&ParmEncriptado16)
&Url = ArmoUrlServicio(&HttpRequest, &ParmsEncriptados18)
Link(&Url)
EndEvent
Como conclusión, tenemos que mejorar la forma de testear la aplicación, probando desde la aplicación vieja llamando a la nueva versión.
Comentarios
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.