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

ApacheHttpServer+mod_perl实现防盗链

阅读更多

最近上司部署了个研究防盗链的任务.经过多方搜索找到使用mod_perl实现防盗链的文章,但是整个安装配置过程阻碍甚多.故作此文以为梳理.

 

首先是依赖模块的安装.

1.安装ApacheHttpServer2.2(这是废话)

2.安装Perl5.8.*.或Perl5.12.*

3.使用PerlPPM安装mod_perl,命令如下

对于Perl5.8

ppm install http://theoryx5.uwinnipeg.ca/ppms/mod_perl.ppd

对于Per5.12

ppm install http://cpan.uwinnipeg.ca/PPMPackages/12xx/mod_perl.ppd

   还要安装libapreq2

对于Perl5.8

ppm install http://theoryx5.uwinnipeg.ca/ppms/libapreq2.ppd

对于Perl5.12  暂时还是没找到使用PPM的安装仓库,所以还是建议使用Perl5.8吧.

 

两个模块的安装过程中会提示指定ApacheHttpServer的安装目录,依实填写即可.

 

4.配置httpd.conf(都知道这个是ApahceHttpServer的配置文件吧?)

增加如下片段(其中的PERL_HOME,APACHE_HOME在使用时要替换为真实的文件系统路径)

LoadFile "%PERL_HOME%/bin/perl58.dll" LoadModule perl_module modules/mod_perl.so LoadFile "%APACHE_HOME%/bin/libapreq2.dll" LoadModule apreq_module modules/mod_apreq2.so

 

PerlPostConfigRequire %APACHE_HOME%/modperl/startup.pl <Location / > #这里对整个域都要求验证,可以自定义 SetHandler modperl #设置处理器 PerlAccessHandler KeyAccess #使用的perl编写的处理器 PerlSetVar key 123 #下面的脚本使用这里的key值做密钥进行加密验证 </Location>

5.编写Perl脚本

第4步中有一个modperl目录,在这个目录中增加两个文件

startup.pl

use strict;
use lib qw(d:/ProgramFiles/ApacheSoftwareFoundation/Apache2.2/modperl); # 把这个路径加入到perl lib路径
#d:/ProgramFiles/ApacheSoftwareFoundation/Apache2.2  这部分替换成实际的目录
use Apache2::RequestRec ();
use Apache2::RequestIO ();
use Apache2::Connection ();
use Apache2::RequestUtil ();
use Apache2::ServerUtil ();
use Apache2::Log ();
use Apache2::Request ();

1;

 

KeyAccess.pm

 

 

package KeyAccess;
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 ();
use Digest::MD5 qw(md5 md5_hex md5_base64);

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值
	my $md5value=md5_hex($key.$ip); #使用MD5加密验证
    if ($md5value eq $k) { # 相等可以正常访问
        return Apache2::Const::OK;
    } else { # 否则显示拒绝访问
        my $s = Apache2::ServerUtil->server;
        $s->log_error("[$ip--------forbidden.]");
        return Apache2::Const::FORBIDDEN;
    }
}

1;
 

6.启动服务器

7.尝试访问http://host:port/index.html,会返回一个forbidden响应.

只有使用http://host:port/index.html?key=value才能访问,这里的value为httpd.conf中设置的key+用户ip的MD5值.

 

总结:

自己写的应用需要按照这个约定返回给用户带有正确key的链接地址,用户点击之后正常访问资源.而且该链接只针对一个ip的用户,copy给其它ip的用户是没用的.这样就达到了防盗链的目的.

 

Perl脚本的验证部分也可以写别的东西做验证,比如验证加密的时间串,实现自定义过期时间的链接.

 

本文只是照本宣科,并未追根溯源,mod_perl可以访问很多Apache的api,可以深入研究.

此外我也不知道为什么要安装libapreq2,但目的达成,暂时足矣.

 

整个过程,还稍稍学习了一下Perl脚本,收获蛮大的.

 

分享到:
评论

相关推荐

    apachehttpserver_win

    这通常涉及编辑`httpd.conf`,开启`mod_ssl`模块,配置SSL监听端口(如443)和证书路径。 7. **安全与优化**: 对服务器进行必要的安全设置,例如限制可访问的目录,使用防火墙控制入站连接,以及优化性能设置。 8....

    ApachehttpServer2.4

    2. **模块化设计**:Apache服务器采用模块化架构,允许管理员根据需求选择和配置不同的功能模块,如mod_rewrite(URL重写)、mod_security(安全防护)和mod_deflate(数据压缩)等。 3. **事件模型**:除了传统的...

    ApacheHttpServer

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行...它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

    apache server_HTTP_apache_

    9. **负载均衡**:结合mod_proxy模块,Apache可以实现简单的负载均衡,将请求分发到多个后端服务器,提升系统的整体处理能力。 10. **错误页面定制**:通过配置文件,我们可以定制404、500等错误页面,提供友好的...

    apachehttpserver与tomcat多域名集成(连接)配置步骤[归类].pdf

    这个连接器提供了mod_jk模块,使得Apache与Tomcat之间的通信成为可能。 2. **配置Apache HTTP Server** - 打开Apache的主配置文件`httpd.conf`,在文件末尾添加以下配置以启用mod_jk模块: ```apacheconfig ...

    ApacheHTTPServer2·2·11英文免费版

    ApacheHTTPServer2·2·11英文免费版 不知道是不是最新的

    apache_2.4.23-x64-no-ssl.msi

    ApacheHttpServer msi文件下载 apache_2.4.23-x64-no-ssl.msi apache_2.4.23-x64-no-ssl.msi

    windows系统下Apach和Tomcat集成文档

    - 将`tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x`解压,并将`mod_jk.so`文件复制到`D:\ApacheHttpServer\modules`目录下。 5. **创建workers.properties文件**: - 在`D:\Apache-tomcat-8.5.15\conf`...

    Apache Http Server与Tomcat实现负载均衡和集群

    NULL 博文链接:https://insertyou.iteye.com/blog/1105963

    AAWServer v5.0(全能网站服务器平台).rar

    ActivePerl v5.8 “你程序的安装位置下”\bin ,“你程序的安装位置下”\lib, “你程序的安装位置下”\site JDK v1.4.2_07 “你程序的安装位置下”\Java\jdk Zend v3.2.0 “你程序的安装位置下”\local\zend ...

    AAWServer(集成Tomcat6) v5.0.rar

     ActivePerl v5.8 你安装目录\bin ,你安装目录\lib, 你安装目录\site  JDK v1.6.2_07 你安装目录\Java\jdk  Zend v3.2.0 你安装目录\local\zend  phpMyAdmin v3.1.1 你安装目录\local\phpMyAdmin  ...

    cognos+ldap+oracle+apatch的安装和配置实战经验

    - 存放位置:E:\soft_setup\cognos8.3安装程序\ApacheHTTPServer - 作为 Cognos Connection 门户的 Web 服务器。 - **Sun ONE Directory Server** - 存放位置:E:\soft_setup\cognos8.3安装程序\...

    Apache+Mysql+PHP配置教程

    - 运行`ApacheHTTPServer2.2.15-win32-x86-no_ssl.msi`。 - 一路点击“Next”。 - 如果安装了IIS,请不要选择Port 80。 - 设置相应的域名,例如`localhost`。 - 选择自定义安装`Custom`,以便选择安装路径。 -...

    cognos8.3在window2003ldap+oracle+apatch的安装和配置实战经验

    - 存放位置: E:\soft_setup\cognos8.3安装程序\ApacheHTTPServer - 作为 Cognos Connection 门户的 Web 服务器。 - **Sun ONE Directory Server** - 存放位置: E:\soft_setup\cognos8.3安装程序\...

    discuz安装详解.docx

    4. Web服务器:选择ApacheHttpserver2.2,可以从httpd-2.2.19-win32-x86-openssl-0.9.8r.zip下载,Apache在Linux服务器环境下更为常见。 5. 数据库:安装Mysql5(mysql-essential-5.1.55-win32.zip),为论坛提供...

    Windows下SVNServer安装与配置详解

    2.安裝ApacheHTTPServer 将安装目录修改为C:\ApacheGroup 默认是安装到C:\ProgramFiles\ApacheGroup目录下 安装后的目录结构如下: C:\ApacheGroup\Apache2\bin\ C:\ApacheGroup\Apache2\conf\…… 3.

Global site tag (gtag.js) - Google Analytics