背景
记不起从什么时候开始,不关闭ESET Cyber Security的Web访问保护,macOS系统总是会遇到以下问题
- macOS系统更新下载完成后一直卡住
- 使用Chrome访问如联通家庭网关的页面失败
- 使用Chrome莫名其妙访问部分网页失败
直到今天终于发现了其原因。
契机是最近在使用我司的一款的基于Electron的应用,意外发现莫名其妙有功能不正常,打开控制台查看,发现PUT HTTP请求居然失败了。接下来看看排查过程和真正原因。
排查
首先打开Electron的控制台,定位到发送的HTTP请求,使用右键菜单选择导出到curl请求,在控制台直接请求发现返回200。看起来被请求的服务和请求内容本身并没有问题。
那下一步只能抓包看看怎么回事了。于是使用Wireshark抓包,然后通过跟踪返回400错误的TCP请求数据,还真被我看出了问题。
1 2 3 4 5 6 |
Helper.app.PUT /user-Pic/merchant/******dd.jpg HTTP/1.1 Host: *******.com Connection: keep-alive Content-Length: 6420 ... |
发现哪里不对了么,正常情况下HTTP请求应该从方法名开始,但这里怎么多了个前缀Helper.app.
呢?
一个想法突然闪现在我的脑海里。会不会又是ESET的锅?我果断关闭了ESET的Web访问保护,果然事情出现了变化。Electron里的PUT请求成功了,抓包显示结果如下
1 2 3 4 5 6 7 |
PUT /user-Pic/merchant/******dd.jpg HTTP/1.1 Host: *******.com Connection: keep-alive Content-Length: 6420 ... |
确认了下,发出请求的是Electron,其页面的网络请求是来自其Helper进程,也就是多出来的后缀。
事情到这里,直接原因就找到了。
归因
问题应当大概率是ESET网络安全软件的ESET Network Protection Proxy在执行Web访问保护时,针对名称存在空格的进程处理存在Bug,导致未加密的HTTP请求在处理后HTTP请求数据前方被拼接上了进程名称空格后部分的字符串,最终导致发出的请求不合法而造成HTTP服务器返回异常。
对于个人用户来说,目前的方法是停用ESET的Web保护,或者关闭其对于HTTP的过滤。目前这是最好的办法了。