繁体   English   中英

从安全来源获取请求主机名?

[英]Get request host name from secure source?

我正在网站上进行安全检查,我们有一些代码可以执行以下操作:

<link rel="stylesheet" href="<%=request.getScheme()%>://<%=request.getServerName() %>:<%=request.getServerPort()%><%= request.getContextPath() %>/css/<fmt:bundle basename="version"><fmt:message key="build.date"/><fmt:message key="js.path.separator"/></fmt:bundle>${relativePath}" media="all" type="text/css" />

潜在的理由是使用构建版本构建CSS路径,以强制浏览器加载最新的CSS文件并避免缓存问题。

不幸的是,构造的第一部分使用request.getServerName()构造URL。 事实证明,这是从传入请求中引用回HOST标头的。 这是一个安全漏洞,因为标头可以被欺骗,从而导致生成的链接引用另一个站点而不是本地站点。

有更安全的方法吗? 我曾经考虑过在应用程序上下文中添加一个值,但想知道是否有更好的方法可以做到这一点。

您不需要方案,serverName或serverPort来构造您的URL,因为所有这些默认都相对于当前请求而言。

如果您在https://example.com:8081/project/pages/things.html有一个页面,则其中的链接(如您的示例/project/css/<version><build-date>.css将解析为https://example.com:8081/project/css/<version><build-date>.css无论如何,因此您可以将这些部分保留下来

<link rel="stylesheet" href="<%= request.getContextPath()
     %>/css/<fmt:bundle basename="version">
            <fmt:message key="build.date"/>
            <fmt:message key="js.path.separator"/>
            </fmt:bundle>${relativePath}" media="all" type="text/css" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM