工作上需要给其它部门的同事提供一些数据,或者很简单的web操作(类似cms)功能的页面。
刚开始的时候,直接挂到apache下一个页面,通知对方。但是这样没用用户,密码的验证就导致
任何知道这个url的用户都可以操作,访问,不安全。就花了半天研究了一下perl cgi 的基于session的
验证功能。
我这里只简单的做了两个cgi脚本,一个用于登录验证的动作。另一个执行真正的后台操作动作(这个根据不同的业务需求执行不同的操作:如DB,远程ftp等等)
说明一下,我这里只是简单的把用户名,密码放到服务器上的一个文本里,当然可以用不同DB来实现,但原理是一样的。
#!/usr/local/bin/perl
use strict;
use warnings;
use CGI qw(:standard);
use CGI::Session;
my $q = new CGI;
my $method = request_method();
if ($method eq 'POST' ) {
my $u = param('user');
my $p = param('passwd');
my %user;
open F, "<user.list";
while (<F>) {
s/^/s+//g;
s//s+$//g;
my ($a,$b) = (split/:/);
$user{$a} = $b;
}
close F;
if (defined($user{$u}) && ($user{$u} eq $p)) {
my $session = new CGI::Session("driver:File", $q , {Directory=>'/tmp'});
my $cookie = $q->cookie(CGISESSID =>$session->id );
$session->param('u_name', $u);
$session->param('p_pass', $p);
$session->expire('+1h');
print
$q->header(-charset=>'gb2312', -cookie=>$cookie),
$q->start_html(
-title=>'login required',
);
print $q->h1("登陆成功");
print q(<a href="./a.cgi" mce_href="a.cgi">操作</a>);
}
else {
print
$q->header(-charset=>'gb2312'),
$q->start_html(
-title=>'login required',
);
my $rdurl = 'http://myserver/cgi-bin/l.cgi';
print qq{<mce:script language="JavaScript" type="text/javascript"><!--
};
print qq{alert("用户名或密码错误");};
print "window.location=/"$rdurl/";/n/n";
print qq{
// --></mce:script>};
}
print $q->end_html();
exit(0);
}
print
$q->header(-charset=>'gb2312'),
$q->start_html(
-title=>'login required',
);
print "==== 登陆 ===/n";
print $q->start_form(-name=>'l');
print "User Name: ";
print $q->textfield(
-name=>'user',
);
print $q->p();
print "Password: ";
print password_field(-name=>'passwd');
print $q->p();
print $q->submit(
-name=>'sub',
-value=>'提交'
);
print $q->br();
print $q->end_form();
print $q->end_html();
这个文件的功能首先是验证时候登陆,以避免没有登录直接敲url就可以访问到这个功能。
接着进行一些html的操作,如textarea的文本输入等等。这个处理就千变万化了,我们要根据需求实现。
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/Aylazhang/archive/2009/05/12/4170046.aspx
本文介绍如何使用Perl CGI脚本实现基于session的登录验证功能。通过两个简单的脚本完成登录验证和后台操作,适用于为特定用户提供安全的数据访问或web操作功能。
566

被折叠的 条评论
为什么被折叠?



