一. 遭遇图片盗链

用查看 awstats 的日志分析,没有发现什么异常。于是把 access log 日志拉下来,用逆火网站日志分析器(http://www.loganalyzer.net/cn) 检查了一下站点盗链情况, 文章中的图片,被许多网站直接盗链,造成流量占用大幅上升。

只得加上了一个简单的反盗链(Anti-Leech)措施。我的服务器是 Apache,处理防盗链比较简单,解决之后,于是写下这篇笔记,

二. 使用 rewrite 技术实现 Apache 防盗链

Apache 防盗链的第一种实现方法,可以用 rewrite 实现。首先要确认 Apache 的 rewrite module 可用:能够控制 Apache httpd.conf 文件的,打开 httpd.conf,确保有这么一行配置:

LoadModule rewrite_module modules/mod_rewrite.so

然后在找到自己网站对应的 配置的地方,加入下列代码:

ServerName examples.com

# 防盗链配置

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://examples.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://examples.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.examples.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.examples.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.examples.com/about/nolink.png [R,NC]

防盗链配置的说明:

红色部分: 表示自己的信任站点。对我的站点来说,设置为 http://www.examples.com 和 http://examples.com
    绿色部分: 要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。
    蓝色部分: 盗链后的重定向页面。用以输出警示信息,这张图片应该尽可能的小。例如我的警示图片是 http://www.examples.com/about/nolink.png。为了简单处理的原因,我的绿色字体部分,要保护的图片扩展中,没有 .png 的图片,而警示图片是 .png的。(我站内没有 .png的其他图片)

然后重新启动 apache 服务器即可。

有些用户使用的是虚拟主机,没有服务器的控制权,无法修改 httpd.conf 文件和重启服务器。那么请确认你的虚拟主机支持 .htaccess,将上面的配置写入 .htaccess 文件,放入根目录或图片所在的目录即可:

.htaccess 文件的内容:

# 防盗链配置
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://examples.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://examples.com$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.examples.com/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.examples.com$ [NC]
RewriteRule .*\.(gif|jpg|swf)$ http://www.examples.com/about/nolink.png [R,NC]

注意:

httpd.conf 文件里的配置,是在 apache 启动时一次读取,效率很高
    .htaccess 文件里的配置,每次访问都需要读取分析,效率很低。

#设置存放站点html文件的目录。
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
#设置/目录的指令。具体地说明:
Option:定义在目录内所能执行的操作。
None:表示只能浏览,
FollowSymLinks:允许页面连接到别处,
ExecCGI:允许执行CGI,
MultiViews:允许看动画或是听音乐之类的操作,
Indexes:允许服务器返回目录的格式化列表,
Includes:允许使用SSI。这些设置可以复选。
All:则可以做任何事,但不包括MultiViews。
AllowOverride:加None参数表示任何人都可以浏览该目录下的文件。
另外的参数有:FileInfo、AuthConfig、Limit。

三. 使用 SetEnvIfNoCase 和 access 技术实现 Apache 防盗链

另一种方式是利用 SetEnvIfNoCase 和 access。具体的代码如下:

SetEnvIfNoCase Referer "^http://examples.com" local_ref=1
SetEnvIfNoCase Referer "^http://www.examples.com" local_ref=1

Order Allow,Deny
Allow from env=local_ref

将上述代码,放入前面所讲的 httpd.conf 或 .htaccess 文件即可。

四. Apache 防盗链的技术小结

通过判断 referer 变量的值,判断图片或资源的引用是否合法,只有在设定范围内的 referer,才能访问指定的资源,从而实现了防盗链(Anti-Leech)的目的。需要指出的是:不是所有的用户代理(浏览器)都会设置 referer 变量,而且有的还可以手工修改 referer,也就是说,referer 是可以被伪造的。本文所讲的,只是一种简单的防护手段。当然,应付一般的盗链也足够了。

转载于:https://blog.51cto.com/petermis/1194782

Apache 防盗链(Apache Anti-Leech)技术的简单实现相关推荐

  1. linux隐藏apache信息,Apache防盗链和隐藏版本信息-linux-centos运维

    有需要服务器方面的需求和咨询,可以联系博主 QQ 7271895 一.防盗链 二.隐藏版本信息 实验要求: 三台虚拟机分别是:linux和两台windows虚拟机,linux虚拟机为服务器,Windo ...

  2. 企业级nginx服务优化(三 )Apache+防盗链

    apache   worker/prefork  /application/apache/bin/apachectl -l | sed -n '/worker\|prefork/p'   worker ...

  3. m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链

    通过加密后的文件: 正确地址:curl -i http://访问的IP地址(这里是直播节点IP地址)/hls/S0000_8.m3u8?key=c7e2d8f498920f1a86e4c95d4a58 ...

  4. Apache 网页与安全优化(网页压缩--缓存--防盗链等)

    文章目录 前言 一.Apache 网页优化 1.1.网页压缩 1.1.1.gzip 介绍 1.1.2.Apache 的压缩模块 1.1.3.mod_deflate 模块 1.2.网页缓存 二.Apac ...

  5. Apache和Nginx防盗链

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

  6. 网站防盗链的配置之apache

    如果我们的网站有一些非常有用的资源,别人需要用到却又不愿意下载时,可能会直接复制我们网站资 源的链接地址,然后拷贝到其他的地方,那么别人再去访问这些资源的时候,会直接跳转到我们的服务 器上,这对于我们 ...

  7. Apache实现盗链与防盗链与隐藏版本信息

    文章目录 一:盗链实操步骤 1.2:win 10 测试dns解析 1.3:首先需要手工编译安装Apache 1.4:make编译安装make install 1.5:编辑配置文件 1.6:客户机测试正 ...

  8. Apache网页的优化,安全与防盗链

    内容预知 1. Apache 网页的压缩 1.1 检查压缩模块 1.2   安装mod_deflate 模块 1.3 配置 mod_deflate 模块启用 1.4 检查安装情况,启动服务 1.5 测 ...

  9. apache web服务器与防盗链的设置

    一.安装apache2.4.23 新版本的httpd-2.4新增以下特性: 新增模块: mod_proxy_fcgi(可提供fcgi代理) mod_ratelimit(限制用户带宽) mod_requ ...

最新文章

  1. 把项目放到码云上,通过git 进行项目管理
  2. 最短路算法整理 1557 热浪
  3. ABAP RANGES 在 RFC 的应用示例
  4. windows7旗舰版系统自带组件IIS搭建ftp
  5. Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)
  6. python字符串join和+_Python字符串通过'+'和join函数拼接新字符串的性能测试比较
  7. 【论文写作】学生信息管理系统总体设计如何写
  8. vs调用matlab功能,vs调用matlab
  9. Redis 6.0 源码阅读笔记(3) -- 概述 Redis 重要数据结构及其 6 种数据类型
  10. 【物理应用】基于matlab GUI功率谱估计【含Matlab源码 329期】
  11. 第74句Lies, Damned Lies And Statistics: How Bad Statistics Are Feeding Fake News
  12. 使用注册表清理右键新建菜单
  13. 为什么1//0.1等于9.0,而1//-0.1=-10?
  14. Android 超级轻量的版本更新库AppUpdate
  15. 电视android已停止运行是什么意思,com.android.systemui已停止是什么意思 怎么解决...
  16. 用余弦算法做相似度匹配
  17. SAP 银企直连 常用事务代码,表名,类名
  18. 红牛农场JAVA_JAVA内部类与异常类
  19. 图片转pdf/pdf多文件合并,在线一键完成
  20. C/C++面试感受和经验以及面试题收藏(转)

热门文章

  1. 计算机导论alu的全名,计算机导论试题1.doc
  2. php调用API支付接口 转至http://www.cnblogs.com/chaochao00o/p/6490463.html
  3. 11.练习:用*号打印直角三角形
  4. win10忘记密码,重装系统
  5. 暄桐教室的50本必读书 | 39《前朝梦忆》
  6. Android 巧用 flexboxLayout 布局
  7. 发表一篇工科EI会议论文需要注意的几个点
  8. 形式语言与自动机 Part.5 上下文无关语言与下推自动机(PDA)
  9. 1. stm32h7 移植RTX5(AC6) 基于CUBEMX
  10. 高可用架构设计(3) -电商商品详情页缓存背景及框架说明