作者 | 阿文

责编 | 郭芮

很多站长都会遇到一个很头疼的问题,那就是自己网站的资源经常被盗用,有文字、图片、视频、和二进制或压缩文件,这些资源被盗用后除了导致网站流量丢失之外、还会带来一些经济上的损失。

除了相关法律,例如《中华人民共和国著作权法》可以使版权或著作权所有者通过法律途径来约束和限制一些未经授权非法使用网站多媒体资源,我们还可以通过一些技术手段来约束访问者,使其无法随意盗取相关资源,下面我们就介绍下网站常用的防盗措施和其优势和劣势。

User-agent 防盗

User-Agent 首部包含了一个特征字符串,用来让网络协议的对端来识别发起请求的用户代理软件的应用类型、操作系统、软件开发商以及版本号。不同的浏览器客户端都会携带自己的 user-agent,例如 Chrome 浏览器的 user-agent 是:

user-agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36

在比如 curl 命令去访问一个 url,其带的 user-agent 如下:

User-Agent: curl/7.54.0

亦或者使用一些编程语言的库,例如 Python 的 request 库,其 user-agent 为:

r.request.headers {'User-Agent': 'python-requests/2.18.4',……} 'python-requests/2.18.4',……} 

既然如此,我们可以限制一些 user-agent 的请求,以 nginx 为例,我们判断 httpuseragent 来禁止其访问资源。例如下面的,如果 user-agent 等于 Java|python-urllib 等就返回 403,从而来拒绝这些客户端访问资源。

if ($http_user_agent ~ "Mozilla/4.0$|Mozilla/5.0$|Java|ApacheBench|Python-urllib|^$") { return 403; }$http_user_agent ~ "Mozilla/4.0$|Mozilla/5.0$|Java|ApacheBench|Python-urllib|^$") { return 403; }

但是这种办法并不能完全禁止掉一些请求,因为 user-agent 是客户定义的,以 curl 为例,如下所示。通过 -H 指定 user-agent 的请求头信息,如果对方恰好指定你的黑名单规则,则可以很轻松的绕过限制。

curl -H "User-Agent:xxxx""User-Agent:xxxx"

referer 防盗链

Referer 首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。如下所示的 request headers 中,其 referer 为https://www.google.com/ 则说明其来源是谷歌。

:authority: developer.mozilla.org :method: GET :path: /zh-CN/docs/Web/HTTP/Headers/Referer :scheme: https accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,en;q=0.8 cookie: dwf_sg_task_completion=False dnt: 1 referer: https://www.google.com/ upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36:method: GET :path: /zh-CN/docs/Web/HTTP/Headers/Referer :scheme: https accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,en;q=0.8 cookie: dwf_sg_task_completion=False dnt: 1 referer: https://www.google.com/ upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36

以 nginx 为例,我们可以对指定域名的 referer 进行限制:

if ($http_referer ~* www. xxx.com ) { return 403; }$http_referer ~* www. xxx.com ) { return 403; }

但是这种办法也并不能完全禁止掉一些域名请求,因为 referer 客户也是可以自定义的。以 curl 为例,如下所示,通过 -H 指定 referer:XXXXX 的请求头信息,就可以很轻松的绕过限制。

 curl -H "referer:http://www.baidu.com""referer:http://www.baidu.com"

IP 防盗链

顾名思义,即对指定 IP 或 IP 段进行限制访问。例如一些爬虫经常频繁爬取网站资源,我们可以对其 IP 进行限制。

以 nginx 为例,nginx 的ngxhttpaccess_module 模块可以用来设置允许/禁止哪些IP或IP段访问:

allow 1.1.1.1/24 # 允许IP段访问deny all # 禁止所有 IP 访问1.1.1.1/24 # 允许IP段访问deny all # 禁止所有 IP 访问

token 防盗链

上述的三种原生 HTTP 首部字段都能防止用户随意盗取资源,但是其劣势相当明显,比如都极容易被伪造。

以 nginx 为例安装secure_link模块,默认是没有安装的,要使用这个模块必须在编译时指定下列编译参数:

--with-http_secure_link_module

secure link 防盗链原理:

  • 用户访问资源;

  • 服务器根据secret密钥、过期时间、文件uri生成加密串;

  • 将加密串与过期时间作为参数跟到文件下载地址的后面;

  • nginx下载服务器接收到了过期时间,也使用过期时间、配置里密钥、文件uri生成加密串;

  • 将用户传进来的加密串与自己生成的加密串进行对比,一致允许下载,不一致403。

具体的配置和使用可以参考 https://nginx.org/en/docs/http/ngxhttpsecurelinkmodule.html。

当然除了这种方式,你也可以使用 nginx lua 来自行实现一些自定义的防盗链措施。

【End】

 热 文 推 荐 

5G 时代连接 70 亿人,安全如何保障?

☞Python 最抢手、Java 最流行、Go 最有前途,7000 位程序员揭秘 2019 软件开发现状

Google 员工公开 Windows 10 零日漏洞隐藏 Bug!

不是码农,不会敲代码的她,却最懂程序员!| 人物志

10分钟读懂什么是容器云?

第二! 他排中本聪与V神中间, 单靠文字就“打败”了敲代码的程序员!

不让华为收专利费?美议员提案“秀下限”

直播写代码|英伟达工程师亲授如何加速YOLO目标检测

她说:程序员离开电脑就是 “废物” !

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

如何从技术上“绞杀”盗链者?相关推荐

  1. 视频防止盗链的方法解析

    最近刚完成点播视频防盗链的部署,也对视频防盗链技术方案有了研究与了解.在这里给大家分享下技术方案和原理. 一.先说下为什么要防盗链? 这个主要是: 1.网站方为了防止自己的点播服务器的资源和流量被盗用 ...

  2. 文章抓取显示盗链 php,web资源盗链与防盗链技术解析

    摘要:什么是资源盗链?简单的说,就是某些不法的网站,通过在其自身网站程序里未经过许可非法调用其他网站的资源,然后在自己的网站上显示这些调用的资源,达到了填充自身网站显示的效果,但是浪费了调用资源网站的 ...

  3. http中的反盗链技术的例子实现

    一.背景 1.接着上一篇的内容继续研究了下http请求的反盗链技术,请参考我的上一篇博文:https://blog.csdn.net/chenmingxu438521/article/details/ ...

  4. Python《第一次爬虫遭遇反盗链(上)》

    今天想爬取下往上很多人都爬取过的https://www.mzitu.com/ . 结果很尴尬,只能很浅显地爬取一些首页图片,因为遭遇到了反盗链. 鉴于图片过于那啥,其实我就来搞学习的,也不是什么LSP ...

  5. 中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算

    聚英数科|中国技术经济学会区块链分会秘书长贾永政:人工智能与区块链上的存储和计算 8月18日,由链世纪财经.Ever链动主办,聚英国际.PAI Community联合主办,BTRAC全球数字网络高等智 ...

  6. 从原理到趋势,解剖风口上的区块链技术

    2019独角兽企业重金招聘Python工程师标准>>> 区块链不是一项新技术,而是一个新的技术组合.其关键技术包括P2P动态组网.基于密码学的共享账本.共识机制.智能合约等技术: 科 ...

  7. 技术专栏 | 两万字深度长文!从原理到趋势 解剖风口上的区块链技术

    来源:芯师爷 概要:区块链不是一项新技术,而是一个新的技术组合.其关键技术包括P2P动态组网.基于密码学的共享账本.共识机制.智能合约等技术. 区块链不是一项新技术,而是一个新的技术组合.其关键技术包 ...

  8. 区块链如何在技术上实现去中心化的呢?

    内容来源:书<区块链世界> 主编:井底望天/武文源/史伯平/赵国栋 本文内容为区块链入门级阅读材料,但是还是需要一定的基础知识才能理解,目前国内关于区块链的知识普及还比较少,本文虽然篇幅较 ...

  9. Asp.Net Core 通过中间件防止图片盗链

    一.原理 要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或 ...

最新文章

  1. linux 下常见启动文件配置
  2. ssh mysql 警告_ssh 对数据表查询出错。警告: SQL Error: 1064, SQLState: 42000
  3. Android判断是否Root方法
  4. jvmti_JVMTI标记如何影响GC暂停
  5. centos7 修改为任意网卡名_VirtualBox虚拟机双网卡配置实现与本机互通并上网
  6. testVC.modalPresentationStyle = UIModalPresentationFormSheet; 更改 VC大小
  7. Master of Typing 3 for mac (打字大师3)支持m1
  8. 活动目录设计中需要遵循的七个原则
  9. Spring Cloud Alibaba RocketMQ 快速入门
  10. 在大于32GB或64GB容量的SD卡上使用NOOB安装树莓派 - Using NOOB on SD cards larger than 32GB or 64GB for Raspberry Pi...
  11. 用计算机控制神舟十号,整理后的计算机控制系统复习题答案
  12. 音视频技术开发周刊 85期
  13. 技术总监面试题(Java),看看你会多少?
  14. android retrofit实例,Retrofit使用步骤
  15. 自动预测保险理赔:机器学习之特征预处理(Kaggle保险索赔竞赛案例)
  16. OpenCV_basis
  17. 推荐一个免费下载简历模板的网站
  18. Oracle数据库服务器端和客服端的安装
  19. Unity2020找不到Device Simulator
  20. 华为手机老是android自动升级,安卓手机系统升级!华为手机系统更新设置

热门文章

  1. 《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·002【SQL介绍、数据库的CRUD操作(DDL语句)】
  2. 《编码规范和测试方法——C/C++版》学习笔记 ·002
  3. wps怎么做时间线_时间不够用怎么办?如何做才会更高效
  4. 运行linux中degui_Windows与Linux合二为一?终于能在windows上运行Linux了!
  5. KDE桌面没有wifi的解决方案
  6. Macaca使用过程中的疑问
  7. 做游戏,学编程(C语言) 16 神奇小妖怪
  8. 三条中线分的六个三角形_三角形中的边长和线段(下)
  9. 怎么处理table 与 form绑定的问题(现象:点击取消后 修改的值还是在table显示)
  10. 文本加密算法matlab,matlab希尔加密算法