->add($username=>$password);
--------------------------------------------------------------------------------
如何防范使用者藉由填我的CGI表格来做坏事?
阅读CGIsecurityFAQ,(可在http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html取得),还有PerlCGIFAQ,在http://www.perl.com/CPAN/doc/FAQs/cgi/perl-cgi-faq.html。
简单一句话:使用tainting(沾腥?)这项功能(详见perlsec)。它会让所有不在您的script中、来路不明的资料(譬如,CGI参数)无法放到eval或system等呼叫中使用。除了使用tainting之外,绝对不要使用单一参数的方式下参数给system()或exec(),而应将欲执行的指令及其参数放在一个序列或阵列里面,再传给system()或exec(),这样便可避免globbing【即被shell先做解译】。
--------------------------------------------------------------------------------
如何解读、萃取email标头资料?
如果您只需要一个「快而脏」的解法的话,您可以试试这个从再版的``ProgrammingPerl''''第222页中拿出来的例子:
$/='''';
$header=
$header=~s/\n\s //g;#将延续行合并成单行
head=(UNIX_FROM_LINE,split/^([-\w] ):\s*/m,$header);
譬如说,您若想保留所有Received栏位资料的话【因Received栏位通常不止一个】,这个解法便不太行了。一个完整的解法是使用收录在CPAN的Mail::Header模组(MailTools套件的一部分)。
--------------------------------------------------------------------------------
如何解译CGI表格?
很多人忍不住要自己写程式来处理这部分的工作,所以您们大概都看过一大堆其中有$ENV{CONTENT_LENGTH}和$ENV{QUERY_STRING}的程式码。没错,这麽写是可以行得通,但事实上也有很多在网路上出没的这类程式根本不能用!
请不要忍不住去重新发明轮子【译者:这是英文的说法(reinventingthewheels),也就是浪费时间做人家做过的事的意思】。请改用CGI.pm或CGI_Lite.pm(可自CPAN取得)。如果您被困在无模组的perl1..perl4的土地上,您可以试看看cgi-lib.pl(可至http://www.bio.cam.ac.uk/web/form.html取得)。
--------------------------------------------------------------------------------
如何验证email位址?
无法度。
如果没有寄封信到一个位址去试试看它会不会弹回来(即使是这麽做您还得面对停顿的问题),您是无法确定一个位址是否真的存在的。即使您套用email标头的标准规格来做检查的依据,您还是有可能会遇到问题,因为有些送得到的位址并不符合RFC-822(电子邮件标头的标准)的规定,但有些符合标准的位址却无法投递。
许多人试图用一个简单的正规表示式,例如/^[\w.-] \@([\w.-]\.) \w $/来消除一些通常是无效的email位址。不过,这样做也把很多合格的位址给一起滤掉了,而且对测试一个位址有没有希望投递成功完全没有帮助,所以在此建议大家不要这麽做;不过您可以看看:http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/ckaddr.gz。这个script真的彻底地依据所有的RFC规定来做检验(除了内嵌式comments外),同时会排除一些您可能不会想送信去的位址(如BillClinton【美国柯林顿总统】或您的postmaster),然後它会确定位址中的主机名称可在DNS中找得到。这个script跑起来不是很快,但至少有效。
不少CGIscripts的作者使用另一个替代的方案:用一个简单的正规表示式,(如上头的那个)。如果一个位址能让这个式子对得上的话,那麽就接受这个位址。如果这个位址对不上这个式子的话,便再向使用者讯问,以确定她们填入的这个位址正确无误。
--------------------------------------------------------------------------------
如何解MIME/BASE64字串?
MIME-
