gpt4 book ai didi

java - 修复现场错误 - HRS_REQUEST_PARAMETER_TO_HTTP_HEADER

转载 作者:行者123 更新时间:2023-12-04 08:32:35 27 4
gpt4 key购买 nike

我正在 servlet 中执行下面的代码并发现这个错误 - HRS_REQUEST_PARAMETER_TO_HTTP_HEADER
错误:HTTP 参数直接写入 SSOIdpLogoutRedirect.doPost(HttpServletRequest, HttpServletResponse) 中的 HTTP header 输出

String relayState = request.getParameter("RELAY_STATE");
if(relayState != null)
{
response.sendRedirect(relayState);
}
为了修复这个错误,我添加了下面的代码。
relayState = URLEncoder.encode(relayState,StandardCharsets.UTF_8);
但是 URL 没有以正确的方式重定向,因为我可以看到编码后中继状态 url 已更改
原始继电器状态 = https://sad.ezhdj.net/system/web/apps/dfgh/
编码后是
中继状态 =https%3A%2F%2Fsad.ezdev.net%2Fsystem%2Fweb%2Fapps%2Fdfgh%2F`

最佳答案

你应该使用 HttpServletResponse.encodeRedirectURL()编码重定向网址:

String encodeRedirectURL(String url)

Encodes the specified URL for use in the sendRedirect method or, ifencoding is not needed, returns the URL unchanged. The implementationof this method includes the logic to determine whether the session IDneeds to be encoded in the URL.

...

All URLs sent to the HttpServletResponse.sendRedirect method should berun through this method...


这应该有效:
response.sendRedirect(response.encodeRedirectURL(relayState));
由于您的网址实际上不需要编码,因此输出来自 encodeRedirectURL()将会:
https://sad.ezhdj.net/system/web/apps/dfgh/
并且重定向将正常工作。
编辑:
显然提出的解决方案仍然会触发 HRS_REQUEST_PARAMETER_TO_HTTP_HEADER Blob 错误。
多做一点后 research我发现该错误是为了防止 HTTP response splitting漏洞(即当不需要的 \r\n 写入 http 响应的 header 部分时)。
然后我们应该更好地 sanitizer relayState针对这种类型的漏洞。
一个简单的 relayState.replace("\r\n", "")足以使错误消失:
response.sendRedirect(response.encodeRedirectURL(relayState.replace("\r\n", "")));

关于java - 修复现场错误 - HRS_REQUEST_PARAMETER_TO_HTTP_HEADER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64952451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com