那些年我改过的漏洞
那些年我改过的漏洞
在开发过程中常常会遇到各种各样的漏洞,当漏洞发生时一定要及时的去修复,否则可能会造成巨大损失。这篇文章就说一说我遇到过的漏洞,后续遇到新的漏洞将会你继续更新,请您持续关注!!!
mysql服务器漏洞
Mysql漏洞大多是由于版本未升级造成的,但是由于生产环境的数据库也不可能频繁的升级,常在河边走,哪能不湿鞋,一次的失误就可能给客户造成难以承受的损失。Mysql官方针对漏洞也提供了对应的补丁方案,修补漏洞时可以采用补丁或者卸载升级两种方案
上图中的漏洞是通过绿盟扫描出来的,这里仅针对解决过程进行描述
漏洞文档中会有漏洞补丁链接,可以通过补丁链接查看当前漏洞存在版本,然后进行对应版本的升级
网页搜索漏洞编号,即可查看到漏洞存在版本,针对版本进行升级 还有一种方式就是下载补丁,但是这种方式没有采用过,就不做赘述了(毕竟我只想写有用过的,没用过的没有什么意义)
后台回复“Mysql升级”获取完整版的MySQL升级方案(纯手写)
Nginx相关漏洞方案
脚本下载
我们在部署war包的时候可能会将启动脚本或者其他文件放在一个公共的目录下,此时如果文件夹或文件如果没有做任何限制的话,脚本或配置文件很有可能会直接暴露在公网环境下
此时可以通过配置nginx的拦截策略禁止.sh、.properties等链接的访问
location ~ \.(sh|properties)$ {
deny all;
}
利用X-Forwarded-For伪造客户端IP
攻击者在请求头上带上一个伪造的X-Forwarded-For,由于后续每层代理只会追加而不会覆盖,那么最终到达应用服务器时,获取的左边第一个IP地址将会是客户端伪造的IP。
解决方案:在直接对外的Nginx反向代理服务器上配置以下代码:proxy_set_header X-Forwarded-For $remote_addr;。使用$remote_addr替代$proxy_add_x_forwarded_for。$remote_addr是获取的是直接TCP连接的客户端IP,这个是无法伪造的。
server {
...
location / {
...
proxy_set_header X-Forwarded-For $remote_addrp;
...
}
...
}
注意,如果业务中有统计用户来源ip,该配置有可能会导致用户来源ip不精准,因为如果在你的nginx上游还有其他服务器,比如防火墙等,所获取的ip将会是nginx上游距离最近的一个服务器ip,而不是用户来源ip。
Iframe点击劫持
页面允许被iframe嵌套,当嵌套一个透明不可见的页面时,你鼠标的操作其实是被嵌套的看不到的页面,浮在表层的一系列图片按钮只是为了诱骗你点击固定的位置从而达到攻击者的目的。将域名或者链接添加到已经写好的HTML文件中,该文件里面已经嵌套了一个透明iframe页面,然后在浏览器访问该文件,如果页面访问正常出现特定样式则说明存在点击劫持漏洞
简单来说,就是禁止iframe中嵌套网站页面
解决方案:
server {
...
add_header X-Frame-Options SAMEORIGIN;
...
}
DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM origin:origin为允许frame加载的页面地址
Tomcat相关漏洞方案
版本泄露
访问Tomcat页面是如果页面不存在或者链接异常常会泄露Tomcat的版本号,官方会公开该版本所存在的漏洞,不法分子很可能会通过版本号针对性的进行漏洞攻击,给网站带来极大的威胁
此时可以通过修改tomcat配置来隐藏版本号
进入tomcat的lib目录找到catalina.jar文件
unzip catalina.jar之后会多出两个文件夹
进入org/apache/catalina/util 编辑配置文件ServerInfo.properties
修改为
server.info=Apache Tomcat
server.number=0.0.0.0
server.built=Nov 7 2016 20:05:27 UTC
将修改后的信息压缩回jar包
cd /tomcat/lib
jar uvf catalina.jar org/apache/catalina/util/ServerInfo.properties
重启tomcat
代码相关漏洞方案
Missing Secure Attribute in Encrypted Session (SSL) Cookie(加密会话(SSL) Cookie中缺少安全属性)
该漏洞是指部分Cookie未设置安全属性,安全属性指:HttpOnly
和Secure
解决方案:这两个cookie是由第三方插件产生的,起初没有很好地方案,但是后来想了想,不管是不是第三方插件,只要是站内的链接,均可以使用过滤器进行来设置cookie属性,后采用在代码中对这两个属性进行属性设置
@Component
@ServletComponentScan
@WebFilter(urlPatterns = "/*", filterName = "CookieFilter")
public class CookieFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
//设置安全参数
HttpServletRequest req = (HttpServletRequest)servletRequest;
Cookie[] cookies = req.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if("BMAP_SECKEY".equals(cookie.getName())||"SECKEY_ABVK".equals(cookie.getName())){
String value = cookie.getValue();
StringBuilder builder = new StringBuilder();
builder.append(cookie.getName()+"="+value+";");
builder.append("Secure;");//Cookie设置Secure标识
builder.append("HttpOnly;");//Cookie设置HttpOnly
httpServletResponse.addHeader("Set-Cookie", builder.toString());
}
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
属性设置之后,再访问即可
第三方相关漏洞方案
Log4J漏洞
Log4j爆"核弹级"漏洞,那就来做个拆弹专家吧
未完待续...