最近项目在运行过程中用户们又反应了一个问题,说会偶尔出现图片上传失败的情况。然后将那些失败的图片拿过来进行验证,果然问题出现了,用ie浏览器在上传附件时,会显示这个请求挂起了。用谷歌浏览器在上传附件时,会返回一个Provisional headers are shown,也就是临时的请求头。项目中使用的是F5做负载均衡,并且F5的IP绑定了WAF(网络中间设备,发布web服务时开启的安全策略),后面就是web应用服务器。
问题分析:大部分的附件都可以成功,就是偶尔有几个图片上传时,出现请求被挂起的现象。但直接通过web应用服务器IP访问,验证功能时,这些上传失败的图片都可以成功。并且这些图片在另存之后也可以上传成功。导致这样的问题,第一反应就是请求被F5拦截了。只要绕开F5之后上传失败的图片都没问题。不过。。。。。可达鸭眉头一皱。。。。。为什么图片在另存之后,继续通过F5上传图片,图片也会成功呢?
继续找原因,这些上传失败的请求想通过在F5抓包,看一下是什么情况。但这些请求都没有到F5。
这时候就想到了waf这个玩意儿。一个web应用防火墙,最后检查其日志时发现:Web应用防火墙日志其匹配特征与规则库massive_null_payload匹配,即上传的.jpg图片文件中的payload疑似含“命令注入”代码。简单来说就是这个图片不安全,处理方式也就很简单了,排查.jpg文件的安全性,核查原始.jpg文件MD5是否一致,排查.jpg文件宿主机的主机环境安全,必要时,进行相关主机杀毒清查动作。经过这一系列检查、操作后,用户们的问题得到解决。
以上是该项目出现的问题,如果有同学遇到和我相同的问题,并和这个项目的环境一样,可以检查一下对应的waf。如果只是问题一样但是环境不同,那么建议这些同学可以浏览一下这篇博客:https://blog.csdn.net/w05980598/article/details/79990222?utm_medium=distribute.pc_relevant_bbs_down.none-task--2~all~first_rank_v2~rank_v25-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task--2~all~first_rank_v2~rank_v25-1.nonecase