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脚本,收获蛮大的.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值