解决ESET Cyber Security导致macOS HTTP请求失败问题

背景

记不起从什么时候开始,不关闭ESET Cyber Security的Web访问保护,macOS系统总是会遇到以下问题

  • macOS系统更新下载完成后一直卡住
  • 使用Chrome访问如联通家庭网关的页面失败
  • 使用Chrome莫名其妙访问部分网页失败

直到今天终于发现了其原因。
契机是最近在使用我司的一款的基于Electron的应用,意外发现莫名其妙有功能不正常,打开控制台查看,发现PUT HTTP请求居然失败了。接下来看看排查过程和真正原因。

排查

首先打开Electron的控制台,定位到发送的HTTP请求,使用右键菜单选择导出到curl请求,在控制台直接请求发现返回200。看起来被请求的服务和请求内容本身并没有问题。

那下一步只能抓包看看怎么回事了。于是使用Wireshark抓包,然后通过跟踪返回400错误的TCP请求数据,还真被我看出了问题。

发现哪里不对了么,正常情况下HTTP请求应该从方法名开始,但这里怎么多了个前缀Helper.app.呢?

一个想法突然闪现在我的脑海里。会不会又是ESET的锅?我果断关闭了ESET的Web访问保护,果然事情出现了变化。Electron里的PUT请求成功了,抓包显示结果如下

确认了下,发出请求的是Electron,其页面的网络请求是来自其Helper进程,也就是多出来的后缀。

事情到这里,直接原因就找到了。

归因

问题应当大概率是ESET网络安全软件的ESET Network Protection Proxy在执行Web访问保护时,针对名称存在空格的进程处理存在Bug,导致未加密的HTTP请求在处理后HTTP请求数据前方被拼接上了进程名称空格后部分的字符串,最终导致发出的请求不合法而造成HTTP服务器返回异常。

对于个人用户来说,目前的方法是停用ESET的Web保护,或者关闭其对于HTTP的过滤。目前这是最好的办法了。

发表评论

为防机器,验证码请直接输入4个数字1

*