您现在的位置是:数据库 >>正文
五种常见实现防盗链功能的方案
数据库31人已围观
简介在热门平台上有许多的热点新闻,热门的图片、视频等资源,每天都吸引大量的用户观看和下载。于是就有攻击者通过爬虫等一系列技术手段,把热门平台上的资源拉取到自己的网站然后呈现给用户,从而攻击者达到了即不用提 ...
在热门平台上有许多的种常热点新闻,热门的见实图片、视频等资源,现防每天都吸引大量的盗链的方用户观看和下载。于是种常就有攻击者通过爬虫等一系列技术手段 ,把热门平台上的见实资源拉取到自己的网站然后呈现给用户 ,从而攻击者达到了即不用提供资源也能赚钱的现防目的 ,如下图所示盗取资源的云计算盗链的方过程图:
图片
为此,热门平台为了防止其他的种常小站点盗取其资源 ,于是见实就使用防盗链来保护自身资源不被窃取 。下面我们聊聊常见的现防几种防盗链实现方案。
1 、盗链的方Nginx实现方案
在HTTP协议头里有一个Referer的种常字段,Referer可以告诉服务器该网页请求是见实从哪里链接过来的 ,如下的模板下载现防请求头截图:
图片
那么可以利用请求头上的Referer携带的值,使用Nginx在网关层做防盗链,这个也是最简单的实现防盗链功能的方式之一 。
Nginx通过拦截访问资源的请求 ,通过valid_referers关键字定义的白名单,校验请求头中Referer地址是否为本站,如不是本站请求 ,服务器租用那么就拒绝这个请求的访问,Nginx的配置如下所示 :
复制location ~*\.(gif|jpg|png|jpeg)$ { root /web; valid_referers none blocked www.longxiabiancheng.com; if($invalid_referer){ return 403; } }1.2.3.4.5.6.7.Nginx的方式可以限制大多数普通的非法请求,但不能限制有针对性的攻击请求,因为攻击者可以通过伪造Referer信息来绕过Nginx的检查。
2 、SpringBoot的过滤器实现方案
过滤器同样是使用Referer的原理,在SpringBoot中声明一个过滤器,源码下载然后获取到当前请求头当中的Referer ,如下代码所示 :
复制public class MyResourceFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //获取referer String referer =request.getHeader("Referer"); //指定通过的域名 String allowedDomain = "https://www.longxiabiancheng.com"; //如果不是可以通过的域名 ,直接返回 if(StringUtils.isEmpty(referer) || !referer.startsWith(allowedDomain)){ response.getWriter().write("longxiabiancheng"); return; } } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.过滤器中通过比对Referer中的来源,如果它不是我们允许的来源 ,那么就直接拒绝请求。其实攻击者依然可以伪装Referer,所以还是无法彻底解决资源被盗取的问题。亿华云
3、token验证的实现方案
图片
用户登录之后服务器通过生成一个token,然后每次用户请求后端都需要将token携带给服务器,如果请求中没有token或者token解析失败,就直接拒绝请求的访问 。
但是这种方式攻击者依然可以通过先请求我们的登录接口拿到token后,然后把token放在请求头上,继而达到伪装成正常的用户请求,这样就绕过token验证。
4、时间戳验证方案
正常的免费模板用户打开一个网页之后总会停留一定的时间,即使此用户停留的再短也会比其他的窃取工具(如爬虫)停留的时间长,利用这个特点在每次响应客户端的时候,后端给客户端响应一个时间戳,然后前端携带这个时间戳请求后端接口,后端拿到时间戳后与当前的时间做比对 ,核心的代码如下所示:
复制private boolean checkTime(HttpServletRequest request, HttpServletResponse response) { //获取时间戳 String timestampStr = request.getParameter("timestamp"); try { //时间戳不存在,直接拒绝访问 if (timestampStr == null) { response.getWriter().write("不可以继续访问哦"); return false; } long timestamp = Long.parseLong(timestampStr); long currentTimestamp = new Date().getTime(); //如果停留的时间大约指定的时间 就认为不是机器 if (Math.abs(currentTimestamp - timestamp) < 500) { response.getWriter().write("不可以继续访问哦!"); return false; } return true; } catch (Exception e) { return false; } }1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.请求种的时间戳与当前的时间计算差值,如果差值大于设定的值 ,我们就认为是正常用户的请求,反之认定为盗窃用户请求,则拒绝访问。时间戳的方式也存在一定的误判 ,用户可能确实就在网页上停留很短的时间。
5、图形验证码的实现方案
图形验证码是一种比较常规的限制办法 ,在下载资源,浏览关键信息的时候,都必须要求用户手动操作验证码 ,典型的图形验证码如下所示 :
图片
使用图形验证码使得一般的爬虫工具无法绕过校验 ,从而起到保护资源的目的。
防盗链其实不是百分之百可以防住资源被盗窃的问题,它只能增加破解的难度,因为只要网站的数据能够正常访问,那攻击者就能伪装成正常用户来窃取数据 。在一些大公司中,他们会去结合大数据分析用户的行为 ,将一些不正常的用户行为定义到黑名单中 ,然后在黑名单上的用户请求会被拦截。
Tags:
转载:欢迎各位朋友分享到网络,但转载请说明文章出处“算法与编程”。http://www.bzli.cn/news/304e399692.html
相关文章
网络安全知识:什么是网络钓鱼?
数据库网络钓鱼诈骗诱骗用户泄露敏感数据、下载恶意软件并使自己或组织面临网络犯罪。什么是网络钓鱼?网络钓鱼攻击是欺诈性电子邮件、短信、电话或网站,旨在诱骗用户下载恶意软件、共享敏感信息或个人数据例如社会保障卡 ...
【数据库】
阅读更多如何使用U盘启动安装系统(简单易懂的U盘启动安装系统教程)
数据库在电脑装系统时,使用U盘启动安装是一种快捷方便的方法。本文将为大家介绍使用U盘启动安装系统的详细教程,让您能轻松完成系统安装,提高工作效率。1.购买合适的U盘:确保您拥有一支符合要求的U盘,建议容量大 ...
【数据库】
阅读更多USB3.1和Type-C的区别 Type-C和USB3.1接口对比
数据库USB3.1和USB Type-C的应用现在已经越来越广泛,但是还有人不太清楚二者的区别,有些科技媒体在报道中甚至也会将二者搞混,更有无良厂商利用这一点欺骗消费者。首先我们必须明确的是:USB3.1和 ...
【数据库】
阅读更多
热门文章
最新文章
友情链接
- 小米膜的优点和特点(为你的手机屏幕保驾护航)
- Win10XP双系统安装教程(详解Win10XP双系统安装步骤,轻松享受多系统带来的便利与灵活性)
- 推动产学研融合创新发展,紫光云工业互联网平台应用创新推广中心落地辽宁
- 外星人声卡(探索未知领域的声音艺术)
- 新华三亮相2022全球工业互联网大会 展现“新硬件”创新实力
- 体验XboxOneX的卓越性能与极致画质(探索一台引领游戏娱乐新纪元的游戏机)
- X270在双核CPU中的性能表现(探索X270在双核CPU中的优势和应用场景)
- 光伏、中水、余热……2022北京13个数据中心能评展现五大趋势
- 创意雨伞(用独特设计和多功能特性为雨季增添无限乐趣)
- 所问数据的质量如何?(以数据质量指标为评估标准进行分析) 企业服务器云服务器b2b信息平台亿华云香港物理机源码库网站建设