劫持案例分析:下载OSS文件偶尔出现无法下载

问题描述

下载OSS文件时,偶尔出现文件无法下载的情况。

问题原因

经对比分析,发现下载失败的HTTP响应头中无Cache-Control响应头,并且Server字段的值为空值。而正常下载的情况下,有Cache-Control响应头,并且Server字段正常显示,因此确认此问题可能为劫持问题,实际最终请求并不是OSS响应,或经过OSS响应但被劫持。

解决方案

排查方法

请参见网络异常时如何抓取数据包,进行抓包验证:

  • 异常包抓包验证
    下图为文件下载异常情况下客户端的抓包数据,可以看到响应头的Server字段为空值,并且客户端和OSS的TCP握手包(1153号报文)TTL(Time to live)显示为64。

    根据上图所示,通过以下两个异常信息,基本可以判断是劫持行为。
    • 如果是OSS返回的响应头,Server必然会显示AliyunOSS。
    • 由于默认情况下OSS响应TCP/HTTP请求时,响应的报文中TTL为64,而TTL每经过一跳需要减去1,因此不可能到客户端以后还是64。
  • 正常包抓包验证
    下图为文件下载正常的情况下客户端的抓包数据,可以看到响应头的Server字段为AliyunOSS,这个是正常的字段。TTL(Time to live)的值为53,确认TTL值在正常的范围。

解决方法

  1. 请参见OSS中如何获取Request ID,获取本次请求中捕捉的RequestID。
  2. 根据文件下载异常情况下的请求中获取的RequestID,查看OSS的日志。文件实际是通过阿里云ECS上传,但是日志中显示该次请求的客户端IP非阿里云ECS的公网IP,由此可以说明这次请求并不是ECS直接到OSS,有可能是在用户侧配置了相关的代理,或者是下载流量被劫持导致。
    说明:用户在访问OSS资源时,会产生大量的访问日志,为方便您的查询,您可以开启日志存储功能,详情请参见设置日志转存
  3. 建议您排查网络环境,并同步使用HTTPS请求测试,如何通过OSS实现HTTPS访问请参见OSS实现HTTPS访问的方式

适用于

  • 对象存储OSS