检测到目标X-Content-Type-Option响应头缺失
X-Content-Type-Options
HTTP消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在Content-Type
首部中对MIME类型的设定,而不能对其进行修改。这就禁用了客户端的MIME类型嗅探行为,换句话说,也就是意味着网站管理员确定自己的设置没有问题
解决方案
此类问题事实上是要阻止浏览器对MIME的嗅探行为。当MIME的类型缺失浏览器会通过查看资源对MIME进行嗅探,而这个操作可能涉及安全问题。所以我们应该尽量的设置MIME类型,然后禁用MIME嗅探的行为。
- 设置response响应报文头
- 添加
X-Content-Type-Options
字段,并设值为nosniff
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("X-Content-Type-Options","nosniff");
filterChain.doFilter(request,response);
}
检测到目标X-XSS-Protection响应头缺失
HTTP
X-XSS-Protection
响应头是Internet Explorer,Chrome和Safari的一个特性,当检测到跨站脚本攻击(XSS)时,浏览器将停止加载页面
解决方案
XSS的攻击防御其实涉及很多方面的修改,这里我们不详述。
- 我们可以先通过启用XSS过滤来做基本的防御。
- 配置说明
-
0
:禁用XSS -
1
:启动XSS; -
mode = block
:检测到攻击,浏览器将阻止页面的呈现,而不是过滤页面中的XSS内容; -
report=<reporting-url>
:仅限chrome,检测到攻击后,将报告行为至指定的服务。
-
- 配置说明
- 设置response响应报文头
- 添加
X-XSS-Protection
字段,并设为1;mode=block
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("X-XSS-Protection","1;mode=block");
filterChain.doFilter(request,response);
}
检测到目标Content-Security-Policy响应头
HTTP响应头
Content-Security-Policy
允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除少数例外情况,设置的政策主要涉及指定服务器的源和脚本结束点
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Content-Security-Policy","default-src 'self");
filterChain.doFilter(request,response);
}
检测到目标URL存在HTTP host头攻击漏洞
为了方便的获得网站域名,开发人员一般依赖于
HTTP Host header
。但是这个header时不可信赖的,如果应用程序没有对host header
值进行处理,就有可能造成而已代码的传入
解决方案
对此为WEB项目的host进行管理,通过设置白名单的方式规定可访问的域名。
- 设置拦截器,获取报文头的host字段
- 配置拦截器的白名单
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String host = response.getHeader("host");
if(!checkBlankList(host)){
response.setStatus(HttpStatus.FORBIDDEN.value());
return;
}
filterChain.doFilter(request,response);
}
private boolean checkBlankList(String host){
String reg = "localhost|127.0.0.1|0.0.0.0";
return Pattern.compile(reg).matcher(url).find();
}
检测到目标URL启用了不安全的HTTP方法
检测到目标WEB服务器配置成允许下列其中一个(或多个)HTTP方法:
DELETE
,SEARCH
,COPY
,MOVE
,PROPFIND
,PROPPATCH
,MKCOL
,LOCK
,UNLOCK
。 这些方法表示可能在服务器上使用了WebDAV。由于dav方法允许客户端操纵服务器上的文件,如果没有合理配置dav,有可能允许未授权的用户对其进行利用,修改服务器上的文件。
解决方案
配置所能接收的请求方法,一般配置为POST
、GET
两个方法就够了,有其他需求的就加上
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if(!isAllowMethod(request)){
response.setStatus(HttpStatus.NOT\_FOUND.value());
return;
}
filterChain.doFilter(request,response);
}
private boolean isAllowMethod(HttpServletRequest request){
boolean isAllow = false;
String method = request.getMethod();
if(HttpMethod.GET.toString().equals(method)|| HttpMethod.POST.toString().equals(method)){
isAllow = true;
}
return isAllow;
}
检测到目标主机可能存在缓慢的HTTP拒绝服务攻击
缓慢的HTTP拒绝服务攻击时一种专门针对Web的应用层拒绝服务攻击,攻击者操纵网络上的肉鸡,对目标Web服务器进行海量HTTP请求攻击,直到服务器带宽被打满,造成了拒绝服务。
解决方案
此类问题一般从两个方向解决:文章来源:https://www.toymoban.com/news/detail-679834.html
- 规定请求的连接并发数
- 设置请求超时时间
server.connection-timeout= 5000
server.tomcat.max-connections = 10000
点击劫持:X-Frame-Options未配置
点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。文章来源地址https://www.toymoban.com/news/detail-679834.html
- 添加
X-Frame-Options
响应头-
DENY
:不能被嵌入 -
SAMEORIGIN
:只能嵌入本站 -
ALLOW-FROM
:指定能嵌入的站点
-
- 设置
response响应头
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
//response.addHeader("X-frame-options","DENY");
//response.addHeader("X-frame-options","SAMEORIGIN");
response.addHeader("X-frame-options","ALLOW-FROM 'http://localhost:9080'");
filterChain.doFilter(request,response);
}
到了这里,关于Web 项目中常见的漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!