帮我看一下这个程序
1、/usr/bin/perl -w
2、use CGI qw(:all);
3、use strict;
4、my $name;
5、my $passwd;
6、my $cryptpasswd;
7、my $name=param('name');
8、my $passwd=param('passwd');
9、chomp $name;
10、chomp $passwd;
11、if (my $name eq "") { print "请输入用户名!\n"; exit;}
12、if (my $passwd eq "") { print "请输入密码!\n"; exit;}
13、my $cryptpasswd=crypt($passwd,"ss");
14、open (PASSWD,"/var/www/cgi-bin/shadow")||die "你不能打开文件:$\n";
15、$shadow=<PASSWD>;
16、close(PASSWD);
17、(my $user,my $passwdshadow)=spilt(/:/,$shadow);
18、if (my $name=="$user" && my $cryptpasswd=="$passwdshadow") { print "感、谢你的登录!\n"; exit;}
19、else { print "输入错误了!\n"; exit;}
/var/www/cgi-bin/shadow是/etc/shadow的一个附本,权限是444,这个脚本前13行可以很好的运行,一旦正确的输入用户名和密码后就不能执行了,留下用户名或密码不输入就可以实现预想的功能,不知是怎么回事,各位高手指点我一下
问题点数:50、回复次数:7Top
1 楼fengxx(ohgod)回复于 2002-04-16 17:24:10 得分 10
第15行改用数组来储存试试,
@shadow=<PASSWD>;Top
2 楼bin127(温柔一刀)回复于 2002-04-16 20:11:13 得分 0
我只要该文件的第一行就可以了,用标量和用数组一样的啊Top
3 楼yourway(勵磁繞組,還未娶妻(至少我曾經瘦過))回复于 2002-04-17 10:39:51 得分 10
第18行:
字符串是否相同,用“eq”来判断,而不是“==”。Top
4 楼bin127(温柔一刀)回复于 2002-04-17 16:46:27 得分 0
我把18行改为以下的但只能执行下面的了else了,但print $name; $passwd;
$cryptpasswd;$passwdshadow这四个变量又能达到预期的输出。
if (my $name eq $user && my $cryptpasswd eq $passwdshadow) { print "感、谢你的登录!\n"; exit;}
这是怎么回事呢?请各位指点一下
Top
5 楼yourway(勵磁繞組,還未娶妻(至少我曾經瘦過))回复于 2002-04-17 16:57:33 得分 10
把18行的两个“my”去掉。Top
6 楼icuc88(职业特种兵)回复于 2002-04-17 20:27:45 得分 0
kao,终于看见了my的乱用的后果,
一身冷汗。Top
7 楼domy(虫也)回复于 2002-04-17 21:54:30 得分 20
18、if (my $name=="$user" && my $cryptpasswd=="$passwdshadow") { print "感、谢你的登录!\n"; exit;}
用 eq 而不是==
去掉一些my吧!建议看看Strict帮助!!
^_^
Top




