为什么 JDK 1.6 之后 HttpURLConnection 中的某些 headers 受到限制?
Why are some of the headers restricted in HttpURLConnection after JDK 1.6?
需要对此主题有更深入的了解。
出于特定原因,我尝试在受限 headers 的文档中查找,但找不到。
这是受限制的列表 headers:
Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
Via
要覆盖这些,需要在 JVM 启动时将 sun.net.http.allowrestrictedheaders 设置为 true 或使用
System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
据说它已作为 security-fix 的一部分被禁用。
我想了解可能引发了哪些安全风险,以及如何禁止使用 headers 来解决这个问题,请记住,您仍然可以覆盖 headers.
参考链接:
first link 在注释中说(绿色文本):
These are forbidden so the user agent remains in full control over them
这是为了防止网络浏览器中的恶意 javascript 代码欺骗。
由于 Java 代码不是 Web 浏览器,因此 Java 中只有其中一些受到限制,如源代码的 link 所示。
仍然被限制的headers直接被HttpURLConnection
class控制,应该不需要伪造值,所以限制它们应该不是问题。
需要对此主题有更深入的了解。
出于特定原因,我尝试在受限 headers 的文档中查找,但找不到。
这是受限制的列表 headers:
Accept-Charset
Accept-Encoding
Access-Control-Request-Headers
Access-Control-Request-Method
Connection
Content-Length
Cookie
Cookie2
Date
DNT
Expect
Host
Keep-Alive
Origin
Referer
TE
Trailer
Transfer-Encoding
Upgrade
Via
要覆盖这些,需要在 JVM 启动时将 sun.net.http.allowrestrictedheaders 设置为 true 或使用 System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
据说它已作为 security-fix 的一部分被禁用。
我想了解可能引发了哪些安全风险,以及如何禁止使用 headers 来解决这个问题,请记住,您仍然可以覆盖 headers.
参考链接:
first link 在注释中说(绿色文本):
These are forbidden so the user agent remains in full control over them
这是为了防止网络浏览器中的恶意 javascript 代码欺骗。
由于 Java 代码不是 Web 浏览器,因此 Java 中只有其中一些受到限制,如源代码的 link 所示。
仍然被限制的headers直接被HttpURLConnection
class控制,应该不需要伪造值,所以限制它们应该不是问题。