`
sealbird
  • 浏览: 583699 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

apache防盗链(mod_perl试用二)

阅读更多
引用
(2010-05-27 00:07:01)
转载标签: 杂谈 分类: MSN搬家 
上回提到的防盗链方式是在strings上加上key和time,uri本身是不变的,这种方式其实现在不是很主流,主流的方式是将计算得出的加密串直接改在uri的路径里。比如下面将要提到的例子。要求其实和早先那个squid防盗链的一模一样,就是改成用apache来跑。
Test.pm内容如下:
package Test;
use strict;
use warnings;
use Socket qw(inet_aton);
use POSIX qw(difftime mktime);
use Digest::MD5 qw(md5_hex);
use Apache2::RequestRec ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Request ();
use Apache2::Const qw(DECLINED FORBIDDEN);
sub handler {
    my $r = shift;
    my $s = Apache2::ServerUtil->server;
    my $secret = $r->dir_config('Secret') || '';
    my $uri = $r->uri() || '';
    my $expire = 2 * 3600;
    if ($uri =~ m#^/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/(\w{32})(/\S+\.mp3)$#oi){
my ($year, $mon, $mday, $hour, $min, $md5, $path) = ($1, $2, $3, $4, $5, $6, $7);
my $str = md5_hex($secret . $year . $mon . $mday . $hour . $min . $path);
my $reqtime = mktime(00, $min, $hour, $mday, $mon - 1, $year - 1900);
my $now = time;
if ( $now - $reqtime < $expire){
  if ($str eq $md5) {
   $r->uri("$path");
   return Apache2::Const::DECLINED;
  }
}
}
}
1;
然后在httpd.conf中加上如下配置:
PerlPostConfigRequire /home/apache2/perl/start.pl
SetHandler modperl
PerlTransHandler Test
PerlSetVar Secret abcdef
这里需要注意几点,根据modperl的处理流程,修改uri的时候,handler还没有走到对文件进行寻址,所以无法区分文件路径等信息,故而PerlTransHandler配置不能在<Directory>和<Location>里面。
而在试用一里,核对strings是用的PerlAccessHandler,当时已经确认了uri的文件路径,故而可以在<Location>里。
另,上面的pm,对错误访问返回的是404,如果需要403,return FORBIDDEN就可以了。
如果想同时根据referer来防盗链,可能要在PerlHeaderParserHandler阶段在进行一次判定了,这个还在研究,不知道怎么取request-header的信息……
分享到:
评论

相关推荐

    mod_perl.so

    编译好的mod_perl.so v2.0.4 for Apache 2.2.11 and Perl 5.10.0,解决ppm安装无法得到正确mod_perl.so文件的问题。

    practical mod_perl

    《实用mod_perl》这本书是Perl开发者和Apache服务器管理员的重要参考资料。mod_perl是Apache HTTP服务器的一个模块,它将Perl语言深度集成到服务器内部,极大地提高了性能和效率,特别是对于处理动态内容时。本书...

    mod_perl Perl模块

    标题"mod_perl Perl模块"指的是Apache服务器中的一个核心扩展,它允许Perl语言深度集成到Web服务器中,提高了处理Perl脚本的效率和性能。mod_perl使得Apache能够运行在Perl解释器环境下,而不是传统的CGI(Common ...

    mod_perl-2.0-current.tar.gz

    mod_perl是Apache的一个扩展,它使得Perl代码能够直接在服务器内部运行,而不是像CGI那样每次请求时启动新的Perl解释器。这种内嵌的特性减少了启动进程的时间开销,从而提升了网站的响应速度和整体性能。 描述中...

    mod_perl docs

    1. **mod_perl 1.x 和 mod_perl 2.x**: mod_perl 1.x主要面向Apache 1.x,而mod_perl 2.x则为Apache 2.x设计,后者引入了更多的改进和扩展,如支持Perl5.8及以上版本,更好的线程安全性和模块化结构。 2. **...

    apache mod_log_rotate

    此apache mod_log_rotate 是win32下vc9版的apache 日志文件管理工具。 使用: 复制mod_log_rotate.so到 Apache2/modules 确保你的系统安装了 Visual C++ 2008 Redistributable (可从这里下载:) ...

    mod_perl

    此外,mod_perl还支持在Apache的配置文件中嵌入Perl代码,允许开发者使用Perl编写自定义的Apache模块,并且可以将数据库与Web服务器无缝集成。 #### 二、mod_perl编程基础知识 ##### 1. **看文档** - 在开始mod_...

    Apache2.2 with mod_jk

    【Apache2.2 with mod_jk】:这个标题指出我们关注的是Apache HTTP Server 2.2版本,并且它已经配置了mod_jk模块。Apache HTTP Server是世界上最流行的Web服务器软件,而mod_jk是Apache的一个模块,专门用于连接...

    apache2 通过mod_jk与tomcat配置

    在`000-default`配置文件中,添加`Include /etc/apache2/mods-enabled/mod_jk.conf`,使Apache读取mod_jk的配置。 最后,重启Apache和Tomcat以应用新的配置: ```bash sudo service apache2 restart sudo service ...

    apache2.2 with mod_wsgi for amd64_X64

    注意:64位系统专用,如要32位的,请搜索我另外发布的一个资源"apache2.2 with mod_wsgi for win32_X86"。 使用Apache2.2+mod_wsgi搭建django站点,将apache和mod_wsgi打包提供下载,默认情况下,apache和站点平行...

    Apache安装包与mod_wsgi库

    8. **文件列表中的`Apache_mod_wsgi`**:这个文件可能包含Apache和mod_wsgi的安装文件,以及可能的配置示例和教程文档。解压后,按照文件说明进行安装和配置。 在Windows环境下部署Django项目,结合Apache和mod_...

    apache视频流插件mod_flvx.so mod_h264_streaming.so两个

    第一步,下载mod_flvx.so和mod_h264_streaming.so并放到apache目录下的modules文件夹下 mod_flvx.so mod_h264_streaming.so 把这两个文件放到,apache的modules目录中,然后查找httpd.conf这个文件,打开编辑,找到...

    [其他类别]Apache 防盗连工具_apache_link.zip

    "Apache防盗连工具_apache_link.zip"这个压缩包可能包含了用于帮助用户配置Apache服务器,防止其资源被他人未经许可地链接和使用的相关资料。下面我们将详细讨论Apache防盗连技术及其配置方法。 首先,我们需要了解...

    apache代理mod_proxy、mod_proxy_http代理模块库包下载(32位windows\linux版本).txt

    该软件包是apache的httpd中mod_proxy.so、mod_proxy_http.so代理模块,分别对应包含linux、windows的版本。

    Apache2.2.4 And mod_jk-apache-2.2.4.so

    2. 配置mod_jk:将mod_jk-apache-2.2.4.so文件放到Apache的modules目录下,然后在Apache的配置文件httpd.conf中加载该模块,通过`LoadModule jk_module modules/mod_jk.so`命令。 3. 配置JK工作线程:在httpd.conf中...

    mod-perl developers cookbook

    - **主要内容**:本书是关于mod_perl在Apache中的最佳学习书籍。 - **出版社**:Sams Publish。 - **特点**:适合自学。 #### 描述:the best study book about mod_perl in Apache. Sams Publish, easy for self ...

    Practical Mod Perl

    Practical Mod Perl &lt;br&gt; Copyright Preface What You Need to Know Who This Book Is For How This Book Is Organized Reference Sections Filesystem Conventions Apache ...

    apache flv mp4伪流模块mod_flvx.so mod_h264_streaming.so(附教程)

    第一步,下载mod_flvx.so和mod_h264_streaming.so并放到apache目录下的modules文件夹下 mod_flvx.so mod_h264_streaming.so 把这两个文件放到,apache的modules目录中,然后查找httpd.conf这个文件,打开编辑,找到...

Global site tag (gtag.js) - Google Analytics