OSS防止恶意被刷

这篇具有很好参考价值的文章主要介绍了OSS防止恶意被刷。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OSS和CDN都是一些常用的通过流量计费的,如果被恶意刷新将会造成一些不必要的财产损失。本文主要记录一些关于阿里云的oss的防刷措施。

首先我们分两种情况来排查:

1、恶意referer访问

2、恶意ip库脚本刷新

一、恶意referer访问

对于这种访问,常用的是对oss对象设置防盗链来防止。

二、恶意ip库脚本刷新的

阿里云文档里面说到提供下面的三种办法

  • 将Bucket访问权限改为私有,通过签名后的URL对外提供服务。私有Bucket可以增加恶意下载的成本,但是也需要业务端集成签名算法,详情请参见集成签名算法,因此会产生一定的开发成本。
  • (推荐)迁移数据到新的Bucket中,详情请参见迁移数据,通过高防IP或者WAF防护的自定义域名对外提供服务,详情请参见自定义域名。
  • 迁移数据到新的Bucket中,使用自定义域名对外提供服务,同时开启CDN加速,利用CDN的IP黑名单进行限制访问。详情请参见IP黑名单。

当然对于上面的三种办法,我们也可以增加自己的理解。主要就是限流措施,要么在nginx上做,要么在中间增加后端服务限流。

1、存在后端服务的情况。先把Bucket设置成私有的,然后所有请求原来oss的url在后端服务器上包装一层。在后端服务里面我们可以和前端约定加密算法或者jwt检验cookie等,检验通过后我们在请求阿里云获取图片,把阿里云返回的arraybuffer转换成base64或其他返回给前端。同时后端服务可以利用滑动窗口算法来对请求ip限流等操作。

这里需要注意,请求会吃服务的带宽。

方法二:

 这里还有一种办法,请求阿里云的oss的时候设置过期时间比如10s,让阿里云oss生成临时地址。我们服务器通过302重定向到这个链接上,就可以了。(建议302,因为301的话 链接失效后刷新就会403)

当然你会问10s后就过期了 这样刷新后再请求 也会浪费服务器资源哈。

我们需要设置response的缓存时间,这样浏览器就不会再请求服务器了。

//强缓存设置靠请求头的Cache-Control或者Expires,听说有兼容性问题,老的是Expires,现在越来越多浏览器支持Cache-Control了,建议全都设上。
//Cache-Control设置的是个相对于现在的时间,单位是秒,Expires设置的是GMT时间,以设置10秒为例:
    res.setHeader('Expires',new Date(Date.now()+10*1000).toGMTString())
    res.setHeader('Cache-Control','max-age=10')

代理的转换node的话 可以使用koa-proxies。做成一个中间件帮忙转换url。changeOrigin设置成true。

ps:

阿里云oss内网访问不会进行流量计费,但是服务器也得是阿里云的,且服务器选择的是固定宽带!所以你懂的 哈哈

2、Nginx配置限流的方法。

 阿里云oss绑定自定义域名、然后在自定一域名上的nginx上配置反向代理到Bucket 域名上。在nginx上配置相应的限流方法。最后注意在nginx上不要忘记特殊code的处理。

限流配置分为两种:

        通过请求数进行限流
        通过连接数进行限流

http {
	limit_req_zone $binary_remote_addr zone=iplimit:10m rate=1r/s;
    server {
        server_name  loclhost;
        listen       8080;
        location /access-limit/ {
            proxy_pass   http://127.0.0.1:3000;
            # 根据ip地址限制流量
            limit_req zone=iplimit burst=2 nodelay;
        }
    }
}

$binary_remote_addr:binary_目的是缩写内存占用,remote_addr表示通过IP地址来限流
zone:iplimit是一块内存区域(记录访问频率信息),20m是指这块内存区域的大小
rate: 1r/s = 1 request / second,类似于100/m(每分钟100次请求)
burst: burst=2,设置一个大小为2的缓存区域,当大量请求到来,请求数量超过限流频率时,将其放入缓冲区域
nodelay: 缓冲区满了后直接返回503异常

上面是基于单ip的限流,同时还是支持server_name级别的限流

http {
	limit_req_zone $server_name zone=serverlimit:10m rate=1r/s;
    server {
        server_name  localhost;
        listen       8080;
        location /access-limit/ {
            proxy_pass   http://127.0.0.1:3000;
            # 根据服务器级别进行限流
            limit_req zone=serverlimit burst=2 nodelay;
        }
    }
}

最后我们基于链接数的限流

http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    server {
        server_name localhost;
        listen       8080;
        location /access-limit/ {
            proxy_pass   http://127.0.0.1:3000;
            # 每个server最多保持100个连接
            limit_conn perserver 100;
            # 每个ip最多保持1个连接
            limit_conn perip 1;
        }
    }
}

可以在location下通过配置 limit_req_status 504limit_conn_status 504来修改默认errorCode

错误处理:

proxy_intercept_errors  on;


error_page  500 502 503 504 /404.html;
error_page  400 404 /404.html;
    
location = /404.html{
       root  /www/wwwroot/YOUR-HOST-HERE;
}

参考文章:

OSS被攻击恶意刷流量出现异常流量的排查方法

oss防刷流量配置!文章来源地址https://www.toymoban.com/news/detail-490550.html

到了这里,关于OSS防止恶意被刷的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • javaweb、spring、springmvc和springboot有什么区别,都是做什么用的?

    首先不说Spring那一坨,咋们先来说说JavaWeb。看样子能刷到这个问题的都不是什么JavaWeb的熟手,但是至少Java基础是熟手吧?那么就仔细说说。 JavaWeb,顾名思义就是用Java来做Web程序。那啥又是Web程序呢?那顾名思义就是运行在Web上面的程序。 那Web程序是啥我就不用再解释了吧

    2024年02月03日
    浏览(51)
  • 前后端API接口安全问题,防止抓包恶意请求

    哈喽,你们好,这是我第一次发帖子,最近遇到了一些关于后端api接口的安全问题,相信很多刚开始接触前后端的人都会遇到这样的问题,如果后端写了一个数据库操作的接口供前端使用,而这些接口无论是GET请求还是POST请求都会被抓包,然后恶意的去访问你的api接口。对你

    2024年02月12日
    浏览(35)
  • springboot-防止sql注入,xss攻击,cros恶意访问

    1.sql注入 sql注入: 把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令 解决方法: 1)无论是直接使用数据库还是使用如mybatis组件,使用sql的预编译,不要用拼接字符串。 2)后台过滤检测:使用正则表达式过滤传入的参数**;

    2024年02月16日
    浏览(59)
  • java中的controller、domain、mapper(persistence)、service 都是做什么用的?

    java中的controller、domain、mapper(persistence)、service代表了服务端接口的 4 层,第一层是控制层(controller),负责接口请求/响应的控制,调用第二层业务逻辑层(service 一般分为接口和实现),完成具体业务功能,它会调用第三层数据持久层 mapper(persistence)的逻辑,作用是访

    2024年02月15日
    浏览(48)
  • 防止IP被盗用的三个常见方法介绍

           首先来了解下IP被盗用是什么意思?是指盗用者使用未经授权的IP来配置网上的计算机。目前IP盗用行为非常常见,许多“不法之徒”用盗用地址的行为来逃避追踪、隐藏自己的身份。IP的盗用行为侵害了网络正常用户的权益,并且给网络安全、网络的正常运行带来了

    2024年02月05日
    浏览(40)
  • Web安全 SQL注入漏洞测试.(可以 防止恶意用户利用漏洞)

    SQL注入就是 有些 恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容 中,同时程序的本身对用户输入的内容过于相信, 没有对用户插入的SQL语句进行任何的过滤 ,从而 直接被SQL语句直接被服务端执行 ,导致数据库的原有信息泄露,篡改,甚至被删除等风险。 SQL注

    2023年04月20日
    浏览(48)
  • 小程序安全性加固:如何保护用户数据和防止恶意攻击

    第一章:引言   在当今数字化时代,移动应用程序的使用已经成为人们日常生活中的重要组成部分。小程序作为一种轻量级的应用程序形式,受到了广泛的欢迎。然而,随着小程序的流行,安全性问题也日益凸显。用户数据泄露和恶意攻击威胁着用户的隐私和安全。本文将重

    2024年02月12日
    浏览(53)
  • App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实现方案

    防止应用被截图是一个比较常见的需求,主要是出于安全考虑。下面将分别为iOS(苹果系统)、Android(安卓系统)及HarmonyOS(鸿蒙系统)提供防止截屏的方法和示例代码。 在企业内部使用的应用中,防止员工恶意截屏是一个重要的安全需求。本文将详细介绍iOS、Android和鸿蒙

    2024年02月04日
    浏览(40)
  • 解决前端恶意代码侵入的一些思考

    安全,特别是软件代码安全,近年来被业内人士频繁提出,可见其受重视程度。而这些,起源与全球化的开源大生产。 开源软件运动如火如荼的进行了二十四五年(如果从1998年2月3日在硅谷的一次会议中首次提出“open source”一说开始算 - 当时互联网先驱Netscape刚刚宣布开放

    2023年04月08日
    浏览(36)
  • python yaml库:safe_load()(安全解析函数,解析yaml)(防止yaml文件中包含恶意代码)

    YAML (YAML Ain’t Markup Language) 是一种人类可读的数据序列化标准。它被广泛用于配置文件、多语言环境、交互式应用等场合。Python 为 YAML 提供了强大的支持,其中包括一个安全的加载函数 safe_load 。 safe_load 是 PyYAML 库中的一个函数,用于安全地解析 YAML 文档。它的主要优点是可

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包