当前位置: 首页 > ds >正文

Apache的防盗链配置及详解

简介:

有时候,你的网站莫名奇妙的访问量变大,不要高兴的太早,有可能是被别人盗链了。

举个例子:

比如你搭了个discuz论坛,里面有些热点图片、视频;然后别人将他自己网站上访问图片的地址重定向到你的discuz论坛上,这样他的服务器就可以空闲出来了;也就是说别人访问他自己网站的图片视频,消耗的确是你服务器的资源;

解决这个问题的方法是配置下防盗链,让外来的盗不了链;

实验环境:

首先准备测试环境搭建两台Apache网站服务,来模拟盗链的主机与被盗链的主机
在这里插入图片描述

(1.)首先在第一台Apache服务器上,能够正常访问web网站进行测试:

事先声明本人第一台服务器早已经搭建好Apache服务了,所以这里不再一一介绍。

如果想看Apache详细的安装过程请点击下面这条链接地址即可:

Apache的安装过程http://blog.csdn.net/kangshuo2471781030/article/details/79171344

在这里插入图片描述
通过上图说明Apache1服务器能够正常浏览网页了!!!

(2.)由于第二台主机没有安装Apache服务为了方便,接下来我们在第二台使用yum安装Apache

[root@kang ~]# yum -y install httpd

在这里插入图片描述
(3)安装完后,启动Apache服务,并确认能够正常浏览自己的网站

[root@kang ~]# systemctl start httpd

注意:关闭防火墙或者编写防火墙规则放行80端口:

[root@kang ~]# firewall-cmd  --permanent --add-port=80/tcp
success
[root@kang ~]# firewall-cmd  --reload 
success
[root@kang ~]# 

在这里插入图片描述
通过上图,Apache2能够正常访问自己的网站ok!!!

(4.)接下来模拟盗链,让第二台Apache去盗链第一台Apache网站的图片

通过浏览第一台Apache网站服务得知它的链接地址:主机IP是192.168.197.152

图片是1.jpg
在这里插入图片描述

然后我们进到第二台Apache的根目录,修改一下网页站点,并重启服务

[root@kang ~]# cd /var/www/html/
[root@kang html]# vim index.html

指定要盗链的网站ip地址及图片名称:
在这里插入图片描述
重启Apache服务

[root@kang html]# systemctl restart httpd

再第二台Apache上访问web服务并验证测试:

在这里插入图片描述

注:第二台Apache服务主机IP是192.168.197.162

通过上面这幅图说明,第二台Apache成功盗链了第一台Apache网站上的图片。

那么为了防止别人恶意地占用自己的资源以及黑客的乘虚而入我们在第一台Apache服务上配置防盗链!!!!!

一、配置Apache防盗链

方法1:Apache防盗链的第一种实现方法,可以用rewrite实现。

(1.)首先要确认Apache的rewrite module可用:

打开Apache主配,确保开启rewrite module配置

[root@kang ~]# vim /usr/local/http-2.4.23/conf/httpd.conf
在这里插入图片描述

确认是否开启rewrite module参数

[root@kang ~]# apachectl -M | grep rewrite

在这里插入图片描述
(2.)在Apache主配置文件中找到对应的位置(或虚拟主机中),加入下列代码:

示例:

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

在这里插入图片描述
注意:把规则配置在里面!!!

相关选项的解释

1.RewriteEngine On#启用rewrite,要想rewrite起作用,必须要写上

2.RewriteCond test-string condPattern #写在RewriteRule之前,可以有一或N条,用于测试rewrite的匹配条件,具体怎么写,后面会详细说到。

3.RewriteRule Pattern Substitution#规则

  1. %{HTTP_REFERER}:服务器变量,HTTPReferer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。

5.[ NC]指的是不区分大小写,[R]强制重定向redirect

6.字母L表示如果能匹配本条规则,那么本条规则是最后一条(Last),忽略之后的规则

防盗链配置的说明:

  1. 红色部分:表示自己的信任站点。对我的站点来说,设置为 http://www.benet.com和 http://benet.com

  2. 绿色部分:要保护文件的扩展名(以|分开)。以这些为扩展名的文件,必须通过红色标注的网址引用,才可以访问。

  3. 蓝色部分:定义被盗链时替代的图片,让所有盗链 jpg、gif、swf 等文件的网页,显示网页文档根目录下的about/ nolink.png 文件。注意:替换显示的图片不要放在设置防盗链的目录中,并且该图片文件体积越小越好。

当然你也可以不设置替换图片,而是使用下面的语句即可:RewriteRule .*.(gif|jpg|png)$ - [F]

注:[F] (强制URL为被禁止的forbidden),强制当前URL为被禁止的,即,立即反馈一个HTTP响应代码403(被禁止的)。
注意:

RewriteCond%{HTTP_REFERER}!^$

上面这一行意思是在允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示。

RewriteCond %{HTTP_REFERER} !benet.com/.*$[NC]

RewriteCond %{HTTP_REFERER} !www.benet.com/.*$[NC]

设置允许访问的HTTP来源,包括网站自身。

RewriteRule .*.(gif|jpg|swf)$ http://www.benet.com/about/nolink.png [R,NC,L]

将不满足referer条件的访问重定向至nolink.png。nolink.png位于允许“盗链”的目录about中,要相当注意,不然,警告信息和图片将无法在对方网站上显示。

注意:测试时要清除浏览器缓存

(3.)保存退出,进入到htdoc目录中,创建主配置文件里面允许盗链的目录about,并在里面放一张允许盗链的图片

[root@kang /]# cd /usr/local/http-2.4.23/htdocs/
[root@kang htdocs]# mkdir about
[root@kang htdocs]# cd about/

在这里插入图片描述

(4.)将上传的图片扩展名改成和主配置文件中的图片格式一样
在这里插入图片描述

(5.)重启Apache服务,并在客户端上进行访问验证:

在这里插入图片描述
注意:如果看不到效果,记得多清除缓存哦!!!

通过上图可以看出第二台Apache访问的是已经配置过防盗链的第一台Apache服务,所以他只能看到我们随意上传的图片。

方法2:通过判断浏览器头信息来阻止某些请求,即利用SetEnvIfNoCase和access。这个方法可以通过阻止某些机器人或蜘蛛爬虫抓取你的网站来节省你的带宽流量。

语法: SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] …

SetEnvIfNoCase 当满足某个条件时,为变量赋值,即根据客户端请求属性设置环境变量。

注:Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

(1.)在Apache主配置文件中找到对应的位置(或虚拟主机中),加入下列代码:

示例:

SetEnvIfNoCase Referer "^$" local_ref
SetEnvIfNoCase Referer "www.benet.com/.*$" local_ref
SetEnvIfNoCase Referer "benet.com/.*$" local_ref
<filesmatch "\.(mp3|mp4|zip|rar|jpg|gif)">#2.4版本以上,方法如下:Require all deniedRequire env local_ref
</filesmatch># 2.4版本以下的
方法一:Order Deny,AllowAllow from env=local_ref Deny from all
方法二:Order Allow,DenyAllow from env=local_ref

注意:图片格式要明确

(2.)重启Apache服务,并在客户端上进行访问验证:

在这里插入图片描述
通过上图说明第一台Apache利用SetEnvIfNoCase和access方法成功地阻止了第二台Apache服务的盗链!!!

http://www.xdnf.cn/news/11358.html

相关文章:

  • CVE-2010-3654分析及利用
  • 110个常用的jquery特效和插件
  • 监控摄像头参数详细介绍
  • 浅谈光耦的作用和工作原理
  • 机械制图手册_机械制图基本知识大全!
  • 微信小程序checkbox的排列方向
  • glPushMatrix/glPopMatrix简介及示例(在不同位置绘制图形)
  • 简单邮件传输协议(SMTP)
  • 【apache-tomcat安装配置】完整教程(保姆级)
  • MapX学习基本教程
  • 内存错误的原因和解决方法
  • Linux命令集(Linux文件管理命令--rm指令篇)
  • Android 开发环境搭建的步骤
  • 2024年最全Android修改PackageInstaller自动安装指定应用(3),面试被说跳槽频繁
  • 戴尔服务器安装windows server 2016提示:安装无法找到install.wim 错误代码0x80070026
  • 自动生成--Delphi多层数据库应用项目源代码
  • Delphi入门教程
  • 【Libra 技术解读】详解LibraBFT共识机制
  • Android Path菜单的简单实现
  • C#论坛
  • 数学之美:杨辉三角(帕斯卡三角)的奇特性质
  • 基于C语言的学生信息管理系统开发
  • JSP基于ssm的毕业论文管理系统rz7q5--(程序+源码+数据库+调试部署+开发环境)
  • 粉碎城堡链游Castle Crush,必看全新评测与攻略
  • a标签中href调用js的几种方法,程序员进阶
  • RIP路由协议详解
  • GBK编码表
  • GB2312/GBK/GB18030/BIG5 的历史
  • Vue中使用js-audio-recorder插件实现录音功能并实现上传Blob数据到SpringBoot后台接口
  • 【Java-API】lambda表达式4种方法引用