apache+mod_perl防盗链

2023-11-11

原文地址:http://blog.csdn.net/zjl410091917/article/details/7288096

写这个帖子完全是无意中搜索modperl应用时候发现了,具体可以参见:
http://pyh7.spaces.live.com/blog/cns!47D8D44208AC51E5!140.entry

上面的文档已经写都很详细了,包括怎么安装modperl、Apache2::Request等模块以及配置apache的http.conf就不在累赘都重复了。

大体思路是这样的,比如有一个地址:http://www.aa.com/down/1.mp3,不幸搜索引擎或者迅雷扒到了,就无偿为他们奉献流量了。但是假如在http://www.aa.com/down/1.mp3?key=123,key参数每天变化或者几分钟变化一次,在apache服务端校验下这个参数,不正确则显示拒绝访问或者找不到的话,那样防盗链的效果就算达到了把。

先建立/home/httpd/modperl/startup.pl(目录请自行修改),内容如下:

use strict;

use lib qw(/home/httpd/modperl); # 把这个路径加入到perl lib路径

use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Request ();

1;

modperl强大到可以任意应用apache内部API,官方地址是:http://perl.apache.org 。根据apache版本选择相应的modperl版本,现在大部分都apache2了,就选择modperl2把。具体安装配置可以看官方文档。我这贴部分本机httpd.conf配置:

LoadModule perl_module             modules/mod_perl.so
LoadModule apreq_module          modules/mod_apreq2.so #这个模块需要安装Apache2::Request,具体安装:http://pyh7.spaces.live.com/blog/cns!47D8D44208AC51E5!128.entry

PerlPostConfigRequire /home/httpd/modperl/startup.pl # startup.pl文件一般modperl应用都有,加载一些常用库,可以在apache启动时预先载入,避免重复加载。

<Location /down >
    SetHandler modperl # 设置该目录交给modper处理
    PerlAccessHandler Down # Down是模块名称
    PerlSetVar key 123 # 设置校验参数值
</Location>

修改这些后可以重启下apache,看下logs/error_log里最后是否有mod_apreq和mod_perl字样,如果有就说明成功了。剩下都就是写校验的perl脚本了,/home/httpd/modperl/Down.pm,内容如下:

package Down;
use strict;
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Const -compile => qw(OK FORBIDDEN);
use Apache2::Request ();

sub handler {
    my $r = shift;
    my $req = Apache2::Request->new($r);
    my $ip = $r->connection->remote_ip;
    my $k = $req->param('key') || ''; # 判断访问时是否带key参数
    my $key = $r->dir_config('key') || '123'; # 加载httpd.conf配置中的key值
    if ($key eq $k) { # 相等可以正常访问
        return Apache2::Const::OK;
    } else { # 否则显示拒绝访问
        my $s = Apache2::ServerUtil->server;
        $s->log_error("[$ip--------forbidden.]");
        return Apache2::Const::FORBIDDEN;
    }
}

1;

提示一下,以上两个perl脚本文件末尾记得加上1;

重启下apache。现在可以通过http://www.aa.com/down/1.mp3和http://www.aa.com/down/1.mp3?key=123测试下。可以看见不加参数拒绝访问了把。这里只是简单的判断,实际上可以根据日期或者IP加密生成一个字符串来判断。

请继续关注防盗链系列。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

apache+mod_perl防盗链 的相关文章

随机推荐

  • 阿里云服务器使用记录

    阿里云服务器SSH连接 1 登录打开个人ECS实例 2 确认服务器密码 3 选择VNC连接登录 3 1 注意保存连接密码 或者修改为个人密码 3 2 登录修改文件 vim etc ssh sshd config PermitRootLogi
  • 区块链包含术语概念【27术语整理汇总】

    问题导读1 区块链包含哪些概念 2 什么是工作量证明 3 什么是共识机制 4 你认为哪些概念比较重要 区块链现在很多人都在学习 无论是看书籍 还是看视频 我们有时候并不是明白讲的是什么 比如工作量证明 共识机制等等 所以这里补充下概念 由于
  • 导读:生活中的设计模式——启程之前,请不要错过我

    为什么叫设计模式 什么是设计模式 设计模式与生活有什么联系 为什么要学设计模式 如何进行学习 为什么选择 Python 弥补市场空缺 大势所趋 Python 已然成风 简单的 Python 基础 Python 的特点 基本语法 常用容器 L
  • zabbix 监控硬件

    之前介绍的zabbix监控都是属于监控服务方面 现在介绍一下zabbix监控服务器硬件信息的 本文出自 吟 技术交流 博客http dl528888 blog 51cto com 2382721 1403893 之前介绍的zabbix监控都
  • POJ-2676 Sudoku(简单数独-dfs深搜)

    Sudoku Time Limit 2000MS Memory Limit 65536K 题目链接http poj org problem id 2676 Description Sudoku is a very simple task A
  • Ubuntu: Docker安装与操作

    在进行docker安装前 我们首先得有以下工具 xshell FileZilla Client Xshell下载安装教程 FileZilla Client下载安装教程 如果你的Ubuntu是纯净的 也就是说刚下好并且刚用虚拟机装好的 你得先
  • 渗透测试用工具(三)layer子域名挖掘机

    一 为什么要搜集子域名 收集网站信息的时候子域名收集是非常重要的一部分 通常在一个主站进行防护完善的情况下找不到渗透点的话 我们可以考虑在子站点进行渗透爆破 通过旁站C段进行渗透 子域名收集是渗透测试中 前期信息收集必不可少的一个阶段 域名
  • gstreamer简介--TX2打开摄像头失败解决

    参考链接 https blog csdn net tx3344 article details 7497434 https blog csdn net Tosonw article details 104199195 这两篇都是gstrea
  • 将IdeaVim与IntelliJ一起使用

    我已经成为VIM用户几年了 并且还在IntelliJ中使用IdeaVim插件 以下配置和功能对我有很大帮助 您可以在 ideavimrc文件中配置与常规VIM中相同的键 ideavimrc 设置idearefactormode keep可以
  • “QtCore/qglobal.h”: No such file or directory错误的解决

    QtCore qglobal h No such file or directory错误的解决
  • java8 StreamAPI串行流和并行流

    串行流与并行流 创建一个1 10的list List
  • 信息泄露-小白初识

    生活在网络化 信息化的今天 我们时不时的会听到某某国家 某某网站泄露了多少亿的用户数据 这些数据包括个人的姓名 联系电话 家庭住址 甚至更恶劣的包括个人银行卡账号 宾馆以及网购记录等 如此高速的网络让我们享受到了便利 恐怖的数据泄露事件却另
  • 大数据数据倾斜问题

    数据倾斜 数据倾斜是我们在处理大数据量问题时绕不过去的问题 也是在面试中几乎必问的考点 正常的数据分布理论上都是倾斜的 就是我们所说的 二八原理 80 的财富集中在20 的人手中 80 的用户只使用20 的功能 20 的用户贡献了80 的访
  • SVN 报错 sqlite[S11]: database disk image is malformed

    http blog csdn net yeshencat article details 73741123 蛋碎的开机一会儿 想着把第一件事儿就是更新svn svn正更新 发现鼠标移动不了 还以为电脑USB端口供电不足 结果特么电脑死机 再
  • 前端解决多个跨域问题

    前端解决多个跨域问题 前言 虽然一直是前后端分离 但是没了解过跨域问题 直接是vue config js中的内容直接搬过来改改 但是后来调用了下百度语音拟合的api接口发现 有跨域问题 这个肯定不能动用后端了就查了下资料改了下proty代理
  • GDB调试技巧

    工具程序gdb是GNU调试器 为了能调试程序 编译时必须指定GCC的 g选项将源码与可执行代码联系起来 将程序载入调试器 fibonacci c int current int next int nextnext void setstart
  • idea运行项目报错Cannot run program “C:\Program Files\Java\jdk1.8.0_121\bin\java.exe......解决办法

    在环境变量都配置完好的情况下 基本就是idea的配置除了问题可以检查以下几点 1 SDKs检查 2 路径检查 3 项目配置检查
  • 利用C#实现条形图、饼图的绘制(二)

    继前一篇文章提到关于使用C 绘制条形图的思路之后 这里接着介绍绘制饼图的思路 本篇文章所涉及的源代码是在前面的基础上完成的 在本文的最后 将会提供本实例的完整代码下载地址 有兴趣的朋友可以下载 言归正传 开始介绍饼图的绘制 其实 饼图的绘制
  • js 获取本月、本周、本年年初

    timeSlotChange val let startTime endTime let now new Date 当前日期 var nowDayOfWeek now getDay 今天本周的第几天 var nowDay now getDa
  • apache+mod_perl防盗链

    原文地址 http blog csdn net zjl410091917 article details 7288096 写这个帖子完全是无意中搜索modperl应用时候发现了 具体可以参见 http pyh7 spaces live co