Estoy ejecutando el siguiente código dentro del servlet y obtengo este error: HRS_REQUEST_PARAMETER_TO_HTTP_HEADER Error: parámetro HTTP escrito directamente en la salida del encabezado HTTP en SSOIdpLogoutRedirect.doPost (HttpServletRequest, HttpServletResponse)
String relayState = request.getParameter("RELAY_STATE"); if(relayState != null) { response.sendRedirect(relayState); }Para corregir estos errores, agregué el siguiente código.
relayState = URLEncoder.encode(relayState,StandardCharsets.UTF_8);Pero la URL no se redirige de manera correcta, ya que puedo ver que la URL del estado de retransmisión se ha cambiado después de codificar el estado de retransmisión original = https://sad.ezhdj.net/system/web/apps/dfgh/ y después de codificar es
estado de relé =https%3A%2F%2Fsad.ezdev.net%2Fsystem%2Fweb%2Fapps%2Fdfgh%2F`
debe usar HttpServletResponse.encodeRedirectURL() para codificar las URL de redireccionamiento:
Cadena encodeRedirectURL (cadena URL)
Codifica la URL especificada para su uso en el método
sendRedirecto, si no se necesita codificación, devuelve la URL sin cambios. La implementación de este método incluye la lógica para determinar si el ID de sesión debe codificarse en la URL....
Todas las URL enviadas al método
HttpServletResponse.sendRedirectdeben ejecutarse a través de este método...
Esto debería funcionar:
response.sendRedirect(response.encodeRedirectURL(relayState)); dado que su URL en realidad no necesita codificación, la salida de encodeRedirectURL() será:
https://sad.ezhdj.net/system/web/apps/dfgh/y la redirección funcionará bien.
editar:
la solución aparentemente propuesta aún desencadena el error de HRS_REQUEST_PARAMETER_TO_HTTP_HEADER .
después de investigar un poco más, descubrí que el error está destinado a evitar la vulnerabilidad de división de la respuesta HTTP (es decir, cuando \r\n no deseados se escriben en la sección de encabezado de la respuesta http).
entonces deberíamos desinfectar mejor relayState contra este tipo de vulnerabilidad.
un simple relayState.replace("\r\n", "") es suficiente para que el error desaparezca:
response.sendRedirect(response.encodeRedirectURL(relayState.replace("\r\n", "")));