[英]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.