我目前正在尝试修复网站漏洞,基本上它是一种"错误的输入处理"攻击.
假设我的网站是 www.mywebsite.com ,还有黑客的网站www.hacker.com
每当有请求发送到www.mywebsite.com并且修改后的" Host"标题指向www.hacker.com时,我的网站将创建一个重定向到www.mywebsite.com以及它的网址.例如
正常:
Host: www.mywebsite.com
GET www.mywebsite.com/get/some/resources/
Reponse 200 ok
Run Code Online (Sandbox Code Playgroud)
哈克:
Host: www.hacker.com (#been manually modified)
GET www.mywebsite.com/get/some/resources/
Response 302
Send another Redirect to www.hacker.com/get/some/resources
Run Code Online (Sandbox Code Playgroud)
我的网站是在Tomcat 7上运行的,我尝试了一些解决方案,通过将未知主机设置为虚拟主机defaultlocalhost,假设什么都不做.但它仍然出于某种原因发送重定向.
这附件是我的server.xml主机配置:
<Engine name="Catalina" defaultHost="defaultlocalhost" jvmRoute="jvm1">
<Host name="www.mywebsite.com" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
<Host name="defaultlocalhost" >
</Host>
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,我是否在正确的轨道上防止这种攻击?如果是的话,我做错了什么仍然无效?(最终目标是,如果它不是传入的合法主机,请求应该被丢弃/忽略/返回404但不能重定向302)
先感谢您.
有关此次攻击的更多参考资料:http: //www.skeletonscribe.net/2013/05/practical-http-host-header-attacks.html
http://projects.webappsec.org/w/page/13246933/Improper%20Input%20Handling
当运行"gradle build"时,我的一个项目出现了以下错误,其中几个类得到以下编译错误:
cannot be applied to given types;
this._logFilter.setFirstResult(firstResult);
^
required: int
found: long
reason: actual argument long cannot be converted to int by method invocation conversion
Run Code Online (Sandbox Code Playgroud)
即使该方法setFirstResult采用longas参数.这是代码:
public void setFirstResult(long firstResult) {
this._firstResult = firstResult;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试--refresh-dependencies并清除了缓存等.这些都不适用于我.此外,这个项目是一个maven项目,我将其转换为使用gradle.
编辑:
我根据评论的请求在这里添加了额外的上下文:
这是源代码 this._logFilter
public class GlobalMessageLogFilter {
private long _firstResult = 0L;
private long _maxResults = 100L;
private Application _application;
private SeverityLevelEnum _severityLevel;
private EnvironmentEnum _environment;
private String _userName;
private Category _category;
public EnvironmentEnum getEnvironment() …Run Code Online (Sandbox Code Playgroud) 我目前正致力于将我们的一个Maven项目转换为使用Gradle.这是我目前面临的问题:
该项目使用SQL Integrated安全性.以下是Maven如何处理它(这需要我们一段时间来解决它):
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/sqljdbc4.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)
运行后,gradle init --type pom
这个特定的dependency转换为这样的东西:
system group: 'com.microsoft.jdbcdriver', name: 'sqljdbc', version:'4.0.1'
Run Code Online (Sandbox Code Playgroud)
这是不对的.Gradle无法建立.更具体地说,system范围甚至不存在于Gradle的API中(我都没有在任何第三方Gradle插件中找到它).
任何有Gradle SQL集成安全性经验的人都会非常感激.