|
|
 |
Today's
Tip
การเขียน Perlให้เช็ค password
- จากที่ได้มีคนส่งคำถามมาถึงผมทั้งทาง
mail และ icq กันอย่างมากนะครับเรื่องการเขียน Perl ให้ไปเช็ค password
ก่อนที่จะเข้าไปดูเนื้อหาข้างในต่างๆวันนี้ ผมก็ขอมาไขข้อสงสัยกันเลยแล้วกันครับว่าหลักการต่างๆ
ในการเขียนมาอย่างไรซึ่งผมคิดว่าถ้าเพื่อนๆ พี่ๆน้องๆ เข้าใจหลักการแล้วนำไปประยุกต์ได้ก็
คง ไม่ยากเกินความสามารถของพวกเราหรอกครับ
- เริ่มต้นจากที่เราจะต้องมี
-
- 1.
fileที่เก็บ password ของแต่ละ userไว้อยู่ชื่อ file user.txt โดยแต่ละ
user ถูกแบ่ง โดย | เช่น
- username|password
- โดยจะใช้
user ละ1บรรทัด ถ้าต้องการให้มีหลาย user ก็ขึ้นบรรทัดใหม่ เช่น ตัวอย่าง
file user.txt (ตัวอักษรสีแดง)
- golf|thaimisc
- choo|thaimisc123
- จาก
file user.txt จะบอกได้ว่า ทั้งหมดนั้นมีอยู่ 2 user คือ username
golf มี password คือ thaimisc และ username choo มี password คือ
thaimisc123 ให้นำไฟล์ user.txt นั้นไปไว้ที่เดียวกันกับ login.pl
ครับ
2.
มีหน้าไว้สำหรับ login เพื่อเข้าสู่ระบบ login.html และ file นี้ก็จะมี
form ไว้ให้สำหรับแต่ละ user กรอก login เข้าไป (ตัวอักษรสีแดง)
- <FORM
METHOD="POST" ACTION="/cgi-bin/login.pl">
- username
: <INPUT TYPE="TEXT" NAME="user" SIZE=20><br>
- password
: <INPUT TYPE="password" NAME="pass" SIZE=20><br>
- <INPUT
TYPE="SUBMIT" NAME="login" VALUE="SUBMIT">
- </FORM>
- 3.
สุดท้ายต้องมี file login.pl ที่ทำหน้าที่เช็ค username และ password
- #!/usr/local/bin/perl
- print
"content-type:text/html\n\n";
- &pasteform;
- $userfile
= "user.txt"; #กำหนด directory ของ file user.txt
- if
( ($FORM{'user'} eq "") || ($FORM{'pass'} eq "") ) {print "คุณกรอกข้อมูลด้วยครับ";exit;}
- open(password,
"$userfile" );
- @password
= <password>;
- close(password);
- foreach
$pass1 (@password){
- @data1
= split(/\|/, $pass1);
- $user
= @data1[0];
- $pass
= @data1[1];
- chomp
($pass);
- if
($user eq $FORM{'user'}){
- if
( ($FORM{'user'} ne $user) || ($FORM{'pass'} ne $pass) ) {print "รหัสผ่านไม่ถูกต้อง";exit;}
- $found
= 1;
- $login
= "yes";
- }
- $found
= 0;
- }
- if
($found == "0") {print "ไม่มี user นี้";exit;}
- if
($login eq "yes") {
- print
<<EOF; #ส่วน html ที่จะแสดงเมื่อกรอก login ถูกต้อง
- user
$FORM{'user'}
- login
ถูกต้องเรียบร้อย ครับผม...
- EOF
- exit;
- }
- ####################
-
sub pasteform {
-
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
- @pairs
= split(/&/,$buffer);
- foreach
$pair (@pairs){
- ($name,$value)
= split(/=/,$pair);
-
$value =~ tr/+/ /;
-
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
-
$value =~ s/~!/~!/g; $FORM{$name}=$value;
-
}
-
}
- จากนั้นก็ให้upload
file login.html และ user.txt ไปไว้ที่ เดียวกันกับ ไฟล์ login.pl
และนำ file login.pl ไว้ที่ /cgi-bin
- หลักการของ
โปรแกรมเช็ค password ก็จะเป็นประมาณนี้น่ะครับ ยังไงถ้ามีข้อซักถามก็ส่งมาได้ทาง
mail นะครับ golf@thaimisc.com
- สามารถเข้าไปลองโปรแกรมได้ที่
http://std.act.ac.th/~golf/login.html
- เขียนโดย
: กอล์ฟ
|