全部产品
Search
文档中心

对象存储 OSS:降低因恶意访问流量导致大额资金损失的风险

更新时间:Nov 29, 2023

当您的存储空间(Bucket)被恶意攻击、流量被恶意盗刷时,会出现高带宽或者大流量突发的情况,进而产生高于日常消费金额的账单。如果您希望降低因类似情况带来的大额资金损失的风险,请参考本文提供的多种安全最佳实践。

重要

以下最佳实践遵循一般准则,并不等同完整的安全解决方案。这些最佳实践可能不适合您的环境或不满足您的环境要求,仅建议将其视为参考因素。请您在日常使用中提高数据安全意识并时刻做好内容安全防范措施。

大额资金损失风险

当您的存储空间(Bucket)被恶意攻击、流量被恶意盗刷时,会产生以下大额资金损失风险:

  • 高额账单:当您的存储空间(Bucket)被恶意攻击、流量被恶意盗刷时,实际消耗了OSS的带宽资源,因此您需要自行承担攻击产生的流量带宽费用。

  • 超出账户余额的账单:OSS按量计费,其账单金额受计费周期和账单处理时延等因素的影响,无法做到账户余额为0的情况下立即停机,因而可能会出现欠费金额大于0。当您的存储空间(Bucket)被恶意攻击、流量被恶意盗刷时,极易出现高额账单,连带出现的风险是账单金额往往会超出您的账户余额。

修改ACL为私有访问权限

除非您明确要求包括匿名访问者在内的任何人都能读写您的OSS资源,包括存储空间(Bucket)以及文件(Object),否则请勿将Bucket或者Object的读写权限ACL设置为公共读(public-read)或者公共读写(public-read-write)。设置公共读或者公共读写权限后,对访问者的权限说明如下:

  • 公共读写:任何人(包括匿名访问者)都可以对该Bucket内的Object进行读写操作。

    警告

    互联网上任何用户都可以对该Bucket内的Object进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可能会侵害您的合法权益。除特殊场景外,不建议您配置公共读写权限。

  • 公共读:只有该Bucket的拥有者可以对该Bucket内的Object进行写操作,任何人(包括匿名访问者)都可以对该Bucket内的Object进行读操作。

    警告

    互联网上任何用户都可以对该Bucket内的Object进行访问,这有可能造成您数据的外泄以及费用激增,请谨慎操作。

鉴于公共读或者公共读写权限对OSS资源带来的数据安全风险考虑,强烈建议您将Bucket或者Object的读写权限设置为私有(private)。设置为私有权限后,只有该Bucket拥有者可以对该Bucket以及Bucket内的Object进行读写操作,其他人均无访问权限。因此,在修改ACL为私有访问权限之前,请自行确认业务本身不受影响。

您可以通过多种方式将Bucket或者Object的读写权限设置为私有,具体步骤请参见设置存储空间读写权限ACL设置文件读写权限ACL

通过云监控配置报警规则

当您需要监控OSS资源的使用和运行情况时,可以通过云监控创建阈值报警规则,实现监控指标超过静态阈值或动态阈值后自动发送报警通知的功能,帮助您及时了解监控数据异常并快速进行处理。

例如,您可以为目标存储空间examplebucket配置报警规则,并在报警规则中指定当连续一个周期(1周期=1分钟)出现公网流入流量、公网流出流量、CDN流入流量、CDN流出流量等在其大于或等于100 Mbytes,将告警信息写入日志服务指定的Logstore中。

以公网流入流量大于或者等于100 Mbytes时触发报警为例,其报警规则配置如下:

alert.jpg

您可以基于Bucket的维度配置报警规则,您还可以为当前阿里云账号下的所有OSS资源配置报警规则。有关报警规则的配置步骤,请参见创建报警规则

配置防盗链

OSS支持对Bucket设置防盗链,即通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。

防盗链通过请求Header中的Referer地址判断访问来源。当浏览器向Web服务器发送请求的时候,请求Header中将包含Referer,用于告知Web服务器该请求的页面链接来源。OSS根据浏览器附带的Referer与用户配置的Referer规则来判断允许或拒绝此请求,如果Referer一致,则OSS将允许该请求的访问;如果Referer不一致,则OSS将拒绝该请求的访问。

如下图所示,Referer设置为https://www.example.com,且不允许空Referer。referer

完成上述防盗链配置后,如果用户A在https://www.example.com嵌入了exampleobject.png图片,当浏览器请求访问此图片时会带上https://www.example.com的Referer,此场景下OSS将允许该请求的访问。

此时,如果用户B盗用了exampleobject.png的图片并将其嵌入https://example.org,当浏览器请求访问此图片时会带上https://example.org的Referer,此场景下OSS将拒绝该请求的访问。

有关防盗链的更多信息,请参见开发指南中的防盗链

设置跨域资源共享

跨域资源共享CORS(Cross-Origin Resource Sharing)简称跨域访问,是HTML5提供的标准跨域解决方案,允许Web应用服务器进行跨域访问控制,确保跨域数据传输的安全性。跨域访问是浏览器出于安全考虑而设置的限制,是一种用于隔离潜在恶意文件的关键安全机制。当A、B两个网站属于不同域时,来自于A网站页面中的JavaScript代码访问B网站时,浏览器会拒绝该访问。

OSS支持根据需求灵活配置CORS规则,实现允许或者拒绝相应的跨域请求。例如,您希望仅允许来源为www.aliyun.com、跨域请求方法为GET的请求,则CORS规则配置如下:

cors

有关CORS的配置详情,请参见设置跨域资源共享

避免使用顺序前缀的方式命名文件

当您上传大量文件时,如果使用顺序前缀(如时间戳或字母顺序)、日期、数字ID等可以被遍历的方式来命名文件,攻击者可通过总结规律以及编写脚本的方式获取全部的文件,最终造成数据泄露。强烈建议您通过向文件名添加十六进制哈希前缀或以反转文件名的方式命名文件,从而有效降低文件名被遍历的风险。具体操作,请参见数据安全