ÖÐÎİæ Perl CGI ³Ìʽд×÷³£ÎÊÎÊÌ⼯

°æ±¾£º 1.0

Ô­ÎÄ×÷Õߣº
Shishir Gundavaram <shishir@ora.com>
Tom Christiansen <tchrist@perl.com>

ÖÐÒë¡¢²¹³ä£º
Ïô°ÙÁä <pailing@2Ti.com>

ÎÄÌå˵Ã÷£º

  1. ÒëÕßÒѾÍÔ­ÎÄÖÐÓïÑɲ»Ïê¡¢×ÊѶ¹ýʱ£¬»ò¿É×÷¶îÍâ²¹³äÖ®´¦¸½¼Ó×¢½â¡£ÕâЩע½â¾ù ÒÔÐǺŠ(*) ì¶Êʵ±´¦£¨Í¨³£Îª¾ä⣩±êʾ¡£Êµ¼ÊµÄ˵Ã÷ÎÄ×ÖÔò´ó¶à½ôÁÚÐǺÅËùÔÚ µÄ¶ÎÂ䣬×Ô³ÉÒ»¶Î¡£ËùÓÐ×¢½âÎÄ×Ö¾ùÒÔ¡¸¡¾ÒëÕß¡¿¡¹ÆðÍ·¡£
  2. ·¶ÀýÖÐµÄ Perl ³ÌʽÂëÒÑÓÉÒëÕßÊʶȼÓÒÔ·­Ò롢ȥ³ý¶àâŵÄÀ¨»¡£¬²¢ÒÀ perlstyle manpages ÖÐËù½¨ÒéµÄд×÷¸ñʽ¼°Ï°¹ßÉÔ×÷ÐÞÕû¡£

1.0 £­ ÈëÃżò½é
Q1.1: Ϊʲ÷áÎÒµÄ HTML page/form ÐèÒªÓà script£¿
Q1.2: CGI ¸÷´ú±íʲ÷᣿
Q1.3: µ½µ×ʲ÷á½Ð script£¿ÎÒÄÜÄÃËüÀ´ÄÜ×öʲ÷᣿
Q1.4: ʲ÷áÊÇ Perl£¿ÎªÊ²÷áÓÐÄÇ÷á¶àÈËÓÃËüÀ´×ö CGI£¿
Q1.5: ÓÐûÓÐ½Ì CGI »ò Perl µÄÊé»òÊÇÏßÉÏ×ÊÁÏ£¿
Q1.6: ÊDz»ÊÇÓÐÕâ·½ÃæµÄÓʵÝÂÛ̳ (mailing lists) »òÐÂÎÅÌÖÂÛȺ×飿
Q1.7: ÍøÂ·ÉÏÊDz»ÊÇÓÐרÃÅÊÕ²ØÓʵÝÂÛ̳»òÐÂÎÅÌÖÂÛȺ×éµÄ posts µÄÕ¾£¿
2.0 - Modules £¨Ä£×飩
Q2.1: ÎÒÊDz»ÊǸÃÓà Perl CGI modules À´Ð´ CGI scripts £¿×Ô¼º×ö²»ÊDZȽÏÈÝÒ×Âð£¿
Q2.2: ÈçºÎÖªµÀij¸ö module ¸ÃÔõ÷á¸öÓ÷¨£¿
Q2.3: ÓÐÄÄЩ Perl4 µÄ CGI »ò WWWµÄ libraries £¿
Q2.4: ÓÐÄÄЩ¸ø Perl5 ʹÓÃµÄ CGI modules£¿ÎÒ¸ÃÓÃÄĸö£¿ÎªÊ²÷᣿
Q2.5: Ϊʲ÷áÕâ÷á¶à perl CGI libraries ¶¼ÊÇ object-oriented £¨Îï¼þµ¼Ïò£©µÄ£¿ÎÒ¶ÔÓÃÎï¼þµ¼ÏòÀ´Ð´³ÌʽһÇϲ»Í¨¡£ÄѵÀ¾ÍûÓмòµ¥Ò»µã£¬¸ø²»»áÎï¼þµ¼ÏòµÄÈËʹÓÃµÄ libraries Âð£¿Îï¼þµ¼ÏòÓжàÄÑ£¿
3.0 - CGI Óë WWW Server
Q3.1: ÎÒµÄ Perl CGI ³ÌʽҪ·ÅÔÚÄÄÀïÖ´ÐУ¿cgi-bin Õâ¸öĿ¼ÊÇ×öÉõ÷áÓõģ¿
Q3.2: ʲ÷áÊǵµ°¸Ê¹ÓÃȨÏÞ£¿ÔõÑù¸Ä£¿
Q3.3: Perl Ó¦¸Ã°²×°ÔÚÄÄÀï²Å¿ÉÒÔÖ´ÐÐËü£¿
Q3.4: ÎÒΪʲ÷áÒ»Ö±µÃµ½ ``Server: Error 500'' µÄѶϢ£¿
Q3.5: ÎÒÊÔ×Å´ò¿ªÒ»¸öµµ°¸£¬Ïë°Ñ×ÊÁÏ´¢´æÔÚÀïÍ·£¬µ«ÊÇ open() µÄÖ¸Áîʧ°ÜÁË¡£µ½µ×ÊÇÔõ÷á¸ãµÄ£¿
4.0 £­ ³ÌʽÉè¼ÆÒÉÄÑÔÓÖ¢
Q4.1: ÎÒÏëÈà user ÌîµÄ form ×ÊÁÏ×Ô¶¯¼Ä¸øÎÒ£¬¸ÃÔõ÷á×ö£¿ÓÐûÓз¶Àý£¿
Q4.2: ¸Õ²ÅÕâ¸öÓà form ËÍÐÅµÄ script ¿´ÆðÀ´ÓеãÄÑ¡£ÎªÊ²÷᲻Ǭ´àÓà ``mailto: URL''£¬ÕâÑù user ÌîÈëµÄ×ÊÁϾͿÉÒԼĸøÎÒÁË£¿
Q4.3: ÎÒÒªÈçºÎÔÚ UNIX ÒÔÍâµÄƽ̨ÉÏ×ö Perl-CGI£¬Æ©Èç Mac¡¢MS-DOS¡¢ Windows ¼° NT£¿ÎÒµÄ Perl CGI ³ÌʽÄܲ»ÄÜÔÚÕâЩƽ̨֮¼ä»¥ÏàÒÆÖ²ÄØ£¿Äܲ»ÄÜ ºÜÖ±½Ó£¬Ã»ÓÐÂé·³£¿ÎÒÔÚ UNIX Ö÷»úÉÏÓÐÕʺţ¬µ«ÊǶ¼ÊÇÏÈÔÚ Windows/Mac ÉÏ×ö¡£ ÎÒÒªÈçºÎÔÚÎÒ×Ô¼ºµÄ»úÆ÷ÉϲâÊÔдºÃµÄ CGI scripts£¿
Q4.4: ÔÚ Perl CGI ³ÌʽÖУ¬STDERR £¨±ê×¼´íÎóѶϢ)¡¢STDIN (±ê×¼ÊäÈ룩£¬ºÍ STDOUT £¨±ê×¼Êä³ö£© ¸÷ÊÇÁ¬µ½ºÎ´¦£¿
Q4.5: ÈçºÎд¼ÆÊýÆ÷£¿
Q4.6: ÒªÈçºÎÓÃÒ»¸ö Perl µÄÈ¡´úÖ¸ÁËùÓÐ HTML ±êÇ©´ÓÒ»·ÝÎļþÖÐɾ³ý£¿
Q4.7: ÒªÈçºÎÖªµÀÊÇË­£¯ÄĄ̈»úÆ÷£¯Äĸöä¯ÀÀÆ÷Ö´ÐÐÁËÎҵijÌʽ£¿
Q4.8: È˼ҿ´µÃµ½ÎÒµÄ Perl CGI ³ÌʽÂð£¿Èç¹ûÊÇÕâÑùµÄ»°£¬ÄDz»¾ÍÈÃËûÃÇÖªµÀÎҵijÌʽÊÇÔõ÷áÔË×÷µÄÁË¡£ÕâÊǸö°²È«Â©¶´Âð£¿ÎÒÒªÔõ÷á°ÑËüÒþ²ØÆðÀ´£¿
Q4.9: ÎÒÐèÒª½«Õû¸ö Perl library ¶¼¸´ÖƵ½ÎÒµÄ htdocs Ŀ¼µ×ÏÂÂð£¿
Q4.10: ÎÒΪʲ÷á²»¸Ã½ÐʹÓÃÕßÊäÈëËûÃǵÄÃÜÂë»òÉí·ÝÖ¤×ֺŻòÐÅÓÿ¨ºÅÂ룿ÓÐÒ»¸ö TYPE="password" ²»ÊǾÍÊÇÄÃÀ´×öÕâ¸öµÄÂð£¿
Q4.11: ÎÒÒªÈçºÎ²úÉúרÃÅÌæ Netscape Éè¼ÆµÄÍøÒ³£¬ÒÔ±ðì¶ÊÀÉÏÆäËûµÄä¯ÀÀÆ÷£¿
Q4.12: Ϊʲ÷áÎÒµÄ system() Ëù²úÉúµÄ×ÊÁÏÊä³ö˳Ðò²»¶Ô£¿
Q4.13: ÎÒÌý˵ Netscape »áÖ§Ô® Java¡£ÕâÊDz»ÊÇ˵ ÎÒÏÖÔÚµÃÆú Perl£¬¸ÄJava ÁË£¿ÊDz»ÊǸÃÕâ÷á×ö£¿
Q4.14: ÎÒÒªÈçºÎ¶ÁÈ¡»·¾³±äÊý£¿ÎªÊ²÷áËüÃÇÓÐʱºò»á²»Ò»Ñù£¿
Q4.15: Ϊʲ÷áÎÒÊä³öµÄ×ÊÁϱ»½ÁÂÒÁË£¨Èç ``b Q4.16: Ϊʲ÷áÎÒµÄPerl CGI ³Ìʽ¿ÉÒÔÓÉÖ¸ÁîÁУ¬È´ÎÞ·¨´Óä¯ÀÀÆ÷È¥Ö´ÐУ¿
Q4.17: Ϊʲ÷áÎÒµÄ Perl CGI ³ÌʽÄÜÅÜ£¬µ«ÊDz»»á°Ñ×ÊÁÏдµ½µµ°¸ÖУ¿
Q4.18: ÒªÈçºÎ×öÒ»¸ö»áάϵ״̬£¬»òÔÊÐí¡¾Í¬Ò»Ê¹ÓÃÕß¡¿¶à´ÎÁ¬ÏßµÄ form£¿
Q4.19: Èç¹û²»´Óä¯ÀÀÆ÷È¥Ö´ÐÐÎÒµÄ CGI ³Ìʽ£¬ÒªÈçºÎÌæËü³ý´í£¿
Q4.20: Èç¹û²»¿¿<FORM>±êÇ©£¬ÒªÈçºÎ½Ð³ö Perl CGI ³Ìʽ£¿
Q4.21: ÒªÈçºÎ±ÜÃâÅÔÈ˲»ÏÈÌîÀ¸Î»¾ÍÖ´ÐÐÎÒµÄ form£¿ËûÃÇΪʲ÷áÒ»Ö±²»¶ÏÕâ÷á×ö£¿
Q4.22: ÄÇЩ server »ØÓ¦Âë (server response codes) ÊǸÉʲ÷áÓõģ¿ÓÐʲ÷áÒâÒ壿
Q4.23: Ϊʲ÷á print "Location: http://host/page.html\n" ²» work£¿ÓÖΪʲ÷áËüÖ» work Ò»´Î£¬µ«ËæááµÄתÏò¾Í¶¼Åª´íÁËÄØ£¿
Q4.24: ÒªÈçºÎÈà server ÔÚÿ¸ö HTML ÍøÒ³µÄµ×²¿¶¼×Ô¶¯¼ÓÉÏÒ»¸ö£º¡¸×î½ü¸üÐÂÈÕÆÚ£º ...¡¹µÄ¸æÊ¾£¿»òÕߣ¬ÊDz»ÊÇÖ»ÓÐ SSI µÄÍøÒ³²ÅÄÜÕâ÷á×ö£¿CGI ³ÌʽµÄÈÕÆÚÒªÈçºÎÈ¡ µÃ£¿
Q4.25: ʲ÷áÑùµÄ³¡ºÏÏÂÒÔ Perl д CGI ³Ìʽ»áÏÔµÃ̫СÌâ´ó×÷£¬ÒòΪÓà shell ¾Í¿ÉÒÔ×öµ½£¿¶øÊ²÷áÑùµÄ³¡ºÏ¶Ô Perl À´ËµÓÖ¹ýì¶À§ÄÑ£¿Óà C++ ×öÕâÀàµÄʲ»ÊǺõöàÂð£¿ÄÇÓà C ÄØ£¿
5.0 £­ °²È«
Q5.1: ÒÔ Perl д³ÉµÄ CGI ³ÌʽÊDz»ÊDz»ÈçÒÔ shell »ò C дµÄÀ´µÃ°²È«£¿
Q5.2: ÎÒ¸ÃÌØ±ðÁôÒâÄÄЩ°²È«ÊÂÏ
Q5.3: Ϊʲ÷á´ó¼Ò¶¼Ëµ http://bigidiot.abuse-me.com/perl.exe?foo.pl ÕâÑùºÜΣÏÕ£¿»áÓжàÔ㣿
Q5.4: ÒªÈçºÎÔÚ³ÌʽÖа²È«µØÊ¹ÓÃÄæÏòƲºÅ£¨backticks£¬"`"£©£¿Õâ÷á×ö£º
@ans = `grep'$user_field' some.file`; ÊDz»ÊÇÕæµÄ²»°²È«£¿
Q5.5: /$user_variable/ Õâ¸ö¾ä·¨ÊDz»ÊÇ Perl 5 ÖеÄÒ»¸ö°²È«Â©¶´£¿
°æÈ¨ÊÂÒË

1.0 £­ ÈëÃżò½é


Q1.1: Ϊʲ÷áÎÒµÄ HTML page/form ÐèÒªÓà script£¿

ÒòΪÓеÄʱºòÄúÐèÒªÔÚ HTML ÎļþÖÐʹÓö¯Ì¬×ÊÁÏ£¨·Ç¹Ì¶¨²»±äµÄ×ÊÁÏ£©¡£ Õâ°üÀ¨ÁËÈÕÆÚºÍʱ¼äÕâÀàµÄ¼òµ¥×ÊÁÏ£¬»òÊÇÒ»¸öÏÔʾ¡¸ÄúÊÇµÚ xxx λ·Ã¿Í¡¹µÄ¼Æ ÊýÆ÷¡£µ«ËüÒ²¿ÉÄܰüÀ¨¸ù¾ÝʹÓÃÕßÊäÈë¶øµÃ³öµÄ´ó±ýͼ£¯Ìõͳͼ¡¢×ÊÁÏ¿âËÑѰ²ú ÉúµÄ½á¹û£¬»ò¶¯»­µÈÕâÀàµÄ¶«Î÷¡£Òª×ö³öÏñÕâÑùµÄ¶«Î÷£¬ÄúΨһµÄ·½·¨ÊÇʹÓà CGI scripts £¨¾¡¹ÜÄúÒ²¿ÉÒÔÓ¦Óÿͻ§¶Ë³Ìʽ£¬Èç Java ºÍ JavaScript À´´ïµ½Õâ¸öÄ¿ µÄ£¬²»¹ýÄÇÓÖÊÇÍêÈ«²»Í¬µÄÒ»»ØÊ£¡£©¡£


Q1.2: CGI ¸÷´ú±íʲ÷᣿

ÒÔÏÂÊÇÎҵı༭* Andy Oram ºÍ Linda Mui £¨ËûÃǺܰô£¡£©ËùдµÄÒ»¶Î·Ç ³£ºÃµÄÃèÊö£º

¡¾ÒëÕß¡¿ÕâÊÇÔ­ÎĵĵÚÒ»×÷Õß Shishir G. Ö¸ËûËùдµÄ CGI Programming on the World Wide Web Ò»ÊéµÄ±à¼­¡£



Common          ÏòÄúÈ·±£ CGI ¿ÉÒÔʹÓöàÖÖ³ÌʽÓïÑÔ²¢ºÍ¶àÖÖ

²»Í¬µÄϵͳ»¥¶¯¡£ËüÈÃÄú×ÔÓÉÑ¡Ôñ´ïµ½Ä¿µÄµÄ·½

                ·¨£¬²»°ÑÄú°óËÀÔÚµ¥¶ÀÒ»ÖÖ×÷·¨Ö®ÏÂ*¡£



Gateway         ÌáʾÄú CGI µÄÁ¦Á¿²»ÔÚì¶Ëü±¾ÉíËù×öµÄÊ£¬¶ø

                ÔÚì¶ËüÌṩÁËÁ¬½áÆäËûϵͳµÄDZÁ¦£¬ÀýÈç×ÊÁÏ¿â

                ºÍͼÐÎÖÆÔìÆ÷¡£



Interface       Ö»ÊDZíʾ CGI ¶ÔÈçºÎÉÆÓÃÆäÌØÐÔÌṩÁËÃ÷È·µÄ

½ç¶¨£­»»¾ä»°Ëµ£¬Äú¿ÉÒÔÉè¼Æ³ÌʽÀ´Êʵ±ÀûÓÃÕâ

                ¸ö½éÃæ¡£



¡¾ÒëÕß¡¿ËƺõÓÐÓ°Éä Java Ö®Òâ¡£


Q1.3: µ½µ×ʲ÷á½Ð script£¿ÎÒÄÜÄÃËüÀ´ÄÜ×öʲ÷᣿

¼òµ¥µÄ˵£¬script ¾ÍÊdzÌʽ£¡ºÃ°É¡¢ºÃ°É£¬Ó¦¸Ã˵¶þÕßÓÐÓïÒâÉϵIJî±ð¡£Èç¹ûÄú ÕæµÄÏëÖªµÀ£¬ÄÇ÷áÈ¥ÂòÒ»±¾µçÄÔ³ÌʽÉè¼ÆµÄÊéÀ´¿´£¨»òÐí¸Ã˵ script Éè¼Æ :-) £©¡£

Äú¿ÉÒÔ½å×Åд CGI ³Ìʽ/script ±äºÜ¶àħÊõ¡£Äú¿ÉÒÔ¼´Ê±ÖÆ×÷ͼÐΡ¢Á¬½á×ÊÁϿ⠴«»Ø¡¾²éѯ¡¿½á¹û£¬»¹¿ÉÒÔÁ¬µ½ Internet ÉÏÆäËûµÄ servers È¥¡£


Q1.4: ʲ÷áÊÇ Perl£¿ÎªÊ²÷áÓÐÄÇ÷á¶àÈËÓÃËüÀ´×ö CGI£¿

´ð°¸¾ÍÔÚ perl manpage ÖеÄǰÈþÐÐÐðÊö£º

Perl ÊÇÒ»½âÒëʽµÄÓïÑÔ£¬×¨Îª¸ßЧÂʼìÊÓÎÄ×Öµµ°¸ ¡¢´ÓÖгéÈ¡×ÊÁÏ£¬¾ÝÒÔÓ¡ÖÆ ±¨±í¶øÉè¼Æ¡£

¾ø´ó¶àÊý CGI Ó¦ÓóÌʽµÄÈÎÎñ¶¼Éæ¼°¶Ô×ÊÁÏ×÷ijÖ̶ֳȵĴ¦Àí£¬¼°Á¬½áÍâÔÚ³Ìʽ¡£ Perl Ç¡ºÃÌṩÁ˺ÃÓõŤ¾ß£¬ÈÃÈËÇáËÉÓä¿ìµØ´ï³ÉÕâЩÈÎÎñ¡£


Q1.5: ÓÐûÓÐ½Ì CGI »ò Perl µÄÊé»òÊÇÏßÉÏ×ÊÁÏ£¿

ÒÔÏÂÊÇÓÉ Cye H. Waldman ËùÕûÀíµÄ CGI ºÍ Perl Êé¼®Ò»ÀÀ±í*£º

¡¾ÒëÕß¡¿´Ë±íÓÉÒëÕ߸üУ¬Í¬Ê±¼ÓÈëÁËÔ­ÎÄ×÷Õß Tom C. µÄ Perl ÊéÆÀÒÔ¹©¶ÁÕß ²Î¿¼¡£Çë×¢Ò⣺CGI ¸÷ÊéµÄµÈ¼¶ÆÀ¶¨Ä˵¥¾ÍÆä Perl ²¿·ÝµÄË®×¼¼°ÕýÈ·ÐÔ¶øÑÔ¡£·û ºÅ˵Ã÷£º£¨Tom C. ÓÃÂæÍÕ¶ø·ÇÐÇÐÇ£©

Îå¿ÅÐÇ£¨£ª£ª£ª£ª£ª£© ==> ºÜ°ôµÄÊé (terrific books)
ËÄ¿ÅÐÇ£¨£ª£ª£ª£ª£© ==> ²»´íµÄÊé (fine books)
Èþ¿ÅÐÇ£¨£ª£ª£ª£© ==> ÏñÑùµÄÊé (decent books)
Á½¿ÅÐÇ£¨£ª£ª£© ==> ÂíÂí»¢»¢¡¢ÃãÇ¿¹ýµÃÈ¥µÄÊé (so-so books)
Ò»¿ÅÐÇ£¨£ª£© ==> ²î¾¢µÄÊé (poor books)
Áã¿ÅÐÇ£¨0£ª£© ==> ´óÀÃÊé (terrible books)
NA ==> ²»ÊÊÓá¢ÎÞÊéÆÀ (Not Applicable/Available)
v4 ==> ÄÚÈݽÏÀϾɣ¬½öº¬¸Ç Perl4
×÷Õß ÊéÃû ÆÀ¼Û ³ö°æÕß Ëù¸½ÈíÌå ÊÛ¼Û£¨ÃÀ½ð£©
?? Cgi Programming For Dummies
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£©
NA IDG Books
$25
Jeffrey Friedl Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£©
NA O'Reilly
$30
J.M. Ivler CGI Developer's Resource
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£©
NA Prentice Hall ¹âµú $45
Various authors Perl 5 Windows NT Programming
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£©
NA New Riders
$45
Eric Herrmann Teach Yourself CGI Programming with Perl 5 in a Week, 2nd Ed. NA Sams.net ¹âµú $40
Mark Felton CGI: Internet Programming C++ & C
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£©
NA Prentice Hall
$??
Ed Tittle CGI Bible
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê11Ô£©
NA IDG Books
$??
Craig Patchett &
Matt Wright
The CGI Cookbook: Perl and JavaScript
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê11Ô£©
NA Wiley ¹âµú $40
Baron Weil Drag-n-Drop CGI
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£©
NA Addison-Wesley
$??
Stephen Lines How To Program CGI with Perl 5.0 NA Ziff-Davis ¹âµú $40
Bob Denny et al. CGI Programming for Windows
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£©
NA O'Reilly ´ÅƬ $30
Selena Sol &
Gunther Birznieks
Instant Web Scripts with CGI/Perl NA MIS:Press/M&T Books ¹âµú $40
?? Perl For Dummies
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£©
NA IDG Books
$25
Steven E. Brenner &
Edwin Aoki
CGI Web Scripting With Perl
£¨³ö°æÈ¡Ïû£©
NA MIS:Press/M&T Books ¹âµú $40
?? Perl & CGI Programming Starter Kit NA Sams.net
$45
Mohammed J. Kabir CGI Primer Plus for Windows NA Waite ¹âµú $45
Ed Tittel et al. Foundations of WWW Programming with HTML and CGI, 2nd Ed.
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£©
NA IDG Books ¹âµú $??
Jerry Muelver Creating Cool Web Pages With Perl £ª£ª IDG Books ¹âµú $30
John December HTML & CGI Unleashed, Professional Reference Edition NA Sams.net ¹âµú $50
Eric Johnson Cross-Platform Perl
(See also the author's book site.)
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê9Ô£©
£ª£ª£ª£ª MIS:Press/M&T Books ¹âµú $35
Daniel Berlin et al. CGI Programming Unleashed NA Sams.net
$55
Clinton Wong Web Client Programming in Perl
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê3Ô£©
NA O'Reilly
$30
Robert Seymour Perl 5
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê10Ô£©
NA Springer-Verlag
$40
M he Foghl /TD> Perl 5 Quick Reference £ª Que
$20
Robert Niles &
Jeffry Dwight
CGI by Example NA Que ¹âµú $35
Jonathan Hagey PC Magazine Programming Perl 5.0 CGI Web Pages for Microsoft Windows NT 0£ª Ziff-Davis ¹âµú $35
?? Web Programming with Perl
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê8Ô£©
NA Sams.net ¹âµú $40
?? Perl 5 Developer's Guide
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê12Ô£©
NA Sams ¹âµú $60
David Medinets Perl 5 by Example £ª£ª+1/2£ª Que ¹âµú $35
Stephen Asbury et al. CGI How-To NA Waite ¹âµú $40
Carl Franklin Visual Basic Internet Programming
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê5Ô£©
NA Wiley ¹âµú $40
InfoMagic Mother of Perl
£¨Ò»Ì×Á½ÕŹâµú£©
NA SSC ¹âµú $35
Larry Wall et al. Programming Perl, 2nd Ed. £ª£ª£ª£ª£ª O'Reilly
$40
Eugene Kim CGI Developer's Guide
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê5Ô£©
£ª£ª Sams.net ¹âµú $50
Robert McDaniel CGI Manual of Style
£¨¿É×ÔÏßÉÏÈ¡µÃ£©
NA Ziff-Davis
$25
?? Perl 5 for Dummies
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Ä꣩
NA IDG Books ¹âµú $??
Ginsburg &
Tall
Developing Internet Applications with Perl
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê3Ô£©
NA Sams.net
$??
Kamran Husain Perl 5 Unleashed £ª Sams ¹âµú $50
Norton Teach Yourself Perl 5, 2nd Edition
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê6Ô£©
NA Sams ¹âµú $??
Michael Erwin et al. Special Edition Using CGI NA Que
$60
Thomas Boutell CGI Programming in C and Perl £ª£ª£ª£ª Addison-Wesley ¹âµú $35
Johan Vromans Perl 5 Desktop Reference NA O'Reilly
$7
Christian Neuss &
Johan Vromans
The Webmaster's Handbook: Perl Power for Your Web Server NA Int'l Thomson ¹âµú $30
William E. Weinman The CGI Book NA New Riders ¹âµú $45
Brian Jepson World Wide Web Database Programming for Windows NT NA Wiley ¹âµú $40
Steven E. Brenner &
Edwin Aoki
Introduction to CGI/ Perl £ª£ª£ª(v4) MIS:Press/M&T Books
$20
Ed Tittel &
Sebastion Hassinger
Perl 5 Programming Secrets
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1996Äê3Ô£©
NA IDG Books ¹âµú $45
David Harlan et al. Special Edition Using Perl 5 for Web Programming
£ª£ª Que
$50
Shishir Gundavaram CGI Programming on the World Wide Web £ª£ª O'Reilly ¹âµú $30
Robert Farrel The Official 60 Minute Guide to CGI Programming with Perl £ª£ª£ª(v4) IDG Books
$20
Ed Tittel &
Sebastion Hassinger
Web Programming Secrets with HTML, CGI & Perl NA IDG Books ¹âµú $45
John Deep &
Peter Holfelder
Developing CGI Applications with Perl £ª£ª(v4) Wiley
$30
Jon Orwant Perl 5 Interactive Course £ª£ª£ª Waite ¹âµú $50
Aidan Humphreys et al. Perl 5 How-To £ª£ª£ª Waite ¹âµú $45
Eric Herrmann Teach Yourself CGI Programming with Perl in a Week £ª£ª£ª(v4) Sams.net ¹âµú $40
Walnut Creek Perl
£¨ÊÕ¼¸÷Àà×ÊÔ´¡¢µµ°¸¿â¡¢ÈëÃÅÖ¸µ¼¡¢ÊµÀý¡¢source code µÈ£©
NA Walnut Creek ¹âµú $40
Carl Dichter &
Mark Pease
Software Engineering with Perl
£¨½ø½×¼¶£¬ÄÚÈÝÕë¶ÔÈíÌåרҵÈËÊËÉè¼Æ£»·ÇÈëÃÅÖ¸Òý£©
£ª Prentice Hall ´ÅƬ $30
Ellie Quigley Perl by Example £ª£ª£ª(v4) Prentice Hall
$27
John December &
Mark Ginsburg
HTML & CGI Unleashed NA Sams.net ¹âµú $50
David Till Teach Yourself Perl in 21 Days £ª£ª(v4) Sams
$30
Larry Wall &
Randal L. Schwartz
Programming Perl NA O'Reilly
$30
Randal L. Schwartz Learning Perl £ª£ª£ª£ª(v4) O'Reilly
$25
Ed Tittel et al. Foundations of WWW Programming with HTML and CGI NA IDG Books ¹âµú $40
Lincoln Stein How To Set Up and Maintain a World Wide Web Site, 2nd Edition
£¨Ô¤¶¨³ö°æÈÕÆÚ£º1997Äê1Ô£©
£ª£ª£ª£ª Addison-Wesley ¹âµú $55

¡¾ÒëÕß¡¿ÖÐÎÄµÄ CGI ºÍ Perl µÄÊéÄ¿ÔòÉдýºÃÐĵĶÁÕßÌṩ¡£


Q1.6: ÊDz»ÊÇÓÐÕâ·½ÃæµÄÓʵÝÂÛ̳ (mailing lists) »òÐÂÎÅÌÖÂÛȺ×飿

ÿÌìÓÐÎÞÊýµÄ CGI ¸ßÊÖÔÚ¡¸¼àÊÓ¡¹×ÅÕâ¸öºÜÓÐÓõÄÐÂÎÅÌÖÂÛȺ×飺 comp.infosystems.www.authoring.cgi*¡£

¡¾ÒëÕß¡¿ÖÐÎĵÄÌÖÂÛȺÖÐ×îÊʺÏ×öÕâ·½ÃæµÄÌÖÂ۵Ĵó¸ÅÒªËãÊÇ tw.bbs.comp.www ÁË¡£»¹ÓУ¬Çë²»Òª½« CGI ÎÊÌâ post µ½ comp.lang.perl.misc ÉÏÍ·È¥£¬±ð˵ÒëÕßûÏȾ¯¸æÄúภ;-) ¡£

µ«ÊÇ£¬³ý·ÇÄúÏ顄 FAQ ¶Á¹ýÒ»±é£¬·ñÔòÄú²»Ó¦¸Ãµ½Õâ¸ö°æ×ÓÉÏÈ¥Ëæ±ã post ÎÊÌâ £¨»òÆäËûÈκΰæ×Ó£»Í¬ÑùµÄµÀÀí£©¡£

ÍøÂ·ÉÏÓи÷ʽ¸÷Ñù ÌÖÂÛ Perl¡¢CGI£¬¼° Web µÄÓʵÝÂÛ̳£¬µ«ÒÔµ×ÏÂÕâÁ½¸ö×îÊÜ»¶Ó­£º

cgi-perl-request@webstorm.com ¡¾Hypermail µµ°¸¿â¡¿
Õâ¸öÂÛ̳ÊǸø·¢Õ¹ Perl5 CGI Ä£×é¡¢»ò¶Ô´ËÓÐÐËȤµÄÈËÓõġ£Ëü²¢²»Ìá ¹©ÈκΠCGI Ö§Ô®*¡£

¡¾ÒëÕß¡¿´Ë mailing list ÒѾ­ÊýÔÂûÓÐ posts £¬ÊÙÖÕÕýÇÞÁË¡£Õâ¿ÉÄÜÊÇÓÉì¶ ÌÖÂÛµÄÖ÷Ì⣭CGI::* Ä£×éÌ×¼þ£¨Ïê¼ûÒÔϵڶþƪ¡¸Modules £¨Ä£×飩¡¹µÄ˵Ã÷£© ÒѾ­ÓкÃÒ»¶Îʱ¼äûÓиüÐÂÁË¡£Ä£×éµÄά»¤ÈË Lincoln Stein ½üÒ»Äê¶àÀ´Ëƺõ¶¼ ½«ÖØÐÄ·ÅÔÚËûµÄ CGI.pm ÉÏ£¬¶ø CGI.pm Ҳȡ´úÁË CGI::* Õâ¸öÌ×¼þµÄµØÎ»¡£¶ÁÕß Èç¶Ô CGI::* »ò CGI.pm ÓÐÎÊÌâµÄ»°¿Éдµ½ comp.lang.perl.modules ÉÏÍ·È¥¡£

libwww-perlrequest@ics.uci.edu ¡¾Hypermail µµ°¸¿â¡¿
libwww-perl Õâ¸ö library Ì×¼þΪ Web ¿Í»§¼°ËÅ·þ³ÌʽÉè¼ÆÌṩÁËÒ»Ì×¼ò±ãµÄ½éÃæ*¡£

¡¾ÒëÕß¡¿´Ë mailing list ²»ÊʺÏ×ö CGI µÄÌÖÂÛ¡£libwww-perl ÊÇÒ»ÏîÒÔ Perl Ϊ·¢Õ¹¹¤¾ß¡¢ÀàËÆ W3C/CERN µÄ libwww µÄ¼Æ»­£¨ááÕßÓõÄÊÇ C£©¡£

Äú¿ÉÒÔÔÚ£º
http://www.ics.uci.edu/pub/websoft/libwww-perlÈ¡µÃ¾ÉµÄ (Perl4) libwww-perl µÄÏà¹Ø×ÊÁÏ¡£
×îÐ嵀 Perl5 libwww Ì×¼þ¿ÉÔÚ£º
http://www.sn.no/~libwww-perl/ ´¦È¡µÃ¡£

CPAN: Perl Ä£×éͬʱҲ¿ÉÒÔÔÚ¶àÖØ¸´ÖÆ¡¢·ÖɢʽµÄ CPAN ϵͳȡµÃ¡£ Õâ»á×Ô¶¯ÌæÄúÑ¡ÔñÒ»¸ö¡¸¿¿½üÄúµÄÕ¾¡¹¡£Æ© Èç˵£¬Äú¿ÉÒÔ×¥ LWP Ä£×éµÄ source »òÖ»×¥ËüµÄ readme¡£


Q1.7: ÍøÂ·ÉÏÊDz»ÊÇÓÐרÃÅÊÕ²ØÓʵÝÂÛ̳»òÐÂÎÅÌÖÂÛȺ×éµÄ posts µÄÕ¾£¿

Êǵģ¬Äú¿ÉÒÔÊÔÊÔ The Usenet Newstand¡£ËùÓÐcomp.infosystems.www.* ÌÖÂÛȺ×éµÄÎÄÕ¶¼ÊÕ¼¯ÔÚÄÇ ¶ù*¡£Í¬Ê±£¬cgi-perl ¼° libwww ÕâÁ½¸öÓʵÝÂÛ̳ËûÃÇÒ²ÓÐÊÕ¼¯¡£

¡¾ÒëÕß¡¿Äúͬʱ¿ÉÒÔÊÔÊÔ DejaNews ¡¢ AltaVista £¬ºÍ HotBot Õ⼸¸öËÑѰÒýÇæ£¯×ÊÁϿ⡣ DejaNews ÉõÖÁÁ¬ tw.bbs.* ¶¼ÊÕ¼¯ £¨ÆäËûÁ½¸ö»òÐíÒ²ÓУ¬µ«ÒëÕßûÊÔ¹ý£©¡£


2.0 - Modules £¨Ä£×飩


Q2.1: ÎÒÊDz»ÊǸÃÓà Perl CGI modules* À´Ð´ CGI scripts £¿×Ô¼º×ö²»ÊDZȽÏÈÝÒ×Âð£¿

¡¾ÒëÕß¡¿ CGI modules ÔÚ´ËÖ¸ CGI.pm ¼°ÆäËû CGI::* µÄÄ£×飻Ïê¼û Q2.4 ¡£

ÕâÍêȫȡ¾öì¶ÄúÒª×öµÄÊÇʲ÷á¡£CGI modules ½ÏÊʺÏÖØÁ¿¼¶µÄ CGI scripts ¡£Èç ¹ûÊǼòµ¥µÄ scripts µÄ»°£¬×Ô¼º×ö»òÕßÊÇÓà CGI Lite Õâ¸öÄ£×é»á¼ò±ãÐí¶à¡£Èç ¹ûÄúÕæµÄÔ¸Ò⣬ÄúÉõÖÁ¿ÉÒÔÓÃ¾ÉµÄ Perl4 cgi-lib.pl Õâ¸ö library*¡£

¡¾Òë×¢¡¿ ×÷Õß Tom C. Ö®ËùÒÔÕâ÷á˵ÊÇÒòΪËû»ù±¾Éϲ»ÔÞ³ÉʹÓÃcgi-lib.pl £¬ÓÐ ÐËȤµÄ¶ÁÕß¿ÉÒÔ¿´ËûдµÄ Why I am not fond of cgi-lib.pl £¨ÎªÊ²÷áÎÒ²»ÐÀÉÍ cgi-lib.pl £©¡£


Q2.2: ÈçºÎÖªµÀij¸ö module ¸ÃÔõ÷á¸öÓ÷¨£¿

´ó¶àÊý modules µÄʹÓÃ˵Ã÷ÊÇÖ±½ÓǶÔÚ ³ÌʽÀïµÄ*¡£ Èç¹ûÊÇÕâÑùµÄ»°£¬Äú¿ÉÒÔÓà pod2man Õâ¸ö script À´ÔĶÁʹÓÃÖ¸ÄÏ£º

% pod2text name_of_module.pm
% pod2man name_of_module.pm | nroff -man | more

¡¾Òë×¢¡¿Èç¹ûÄúÔÚ *.pm µµÖп´µ½ ``=head1''¡¢``=cut'' ÕâÀàµÄ¶«Î÷±ãÊÇÏÔʾʹ ÓÃ˵Ã÷Óи½ÔÚÀïÍ·¡£ÕâÊÇ Larry Wall Éè¼ÆµÄ POD (Plain Old Document) ¸ñʽ¡£ Ïê¼û perlpod manpages¡£


Q2.3: ÓÐÄÄЩ Perl4 µÄ CGI »ò WWWµÄ libraries £¿

×î¹ãΪʹÓÃµÄ Perl4 CGI library ÊÇ Steve Brenner µÄ cgi-lib.pl¡£


Q2.4: ÓÐÄÄЩ¸ø Perl5 ʹÓÃµÄ CGI modules£¿ÎÒ¸ÃÓÃÄĸö£¿ÎªÊ²÷᣿

CGI.pm*
Õâ¸öºÜ°ôµÄ module ÔÚ¹¦ÄÜÉϺͲ¿·Ö CGI::* modules ÏàÖØµþ¡£Èç¹ûÄú²»ÏëºÍ¶àÖØ modules ´ò½»µÀµÄ»°£¬Äú¿ÉÒÔÖ»ÓÃÕâÒ»¸ö¡£ÎÒÃǵÈÒ»ÏÂÔÚááÍ·»á¸øÄú¿´Ò»¸öÓà CGI.pm À´Ìæ CGI scripts ³ý´íµÄʵÀý¡£

´ËÍ⣬Lincoln £¨Lincoln Stein£»CGI.pm µÄ×÷Õߣ©»¹Ð´ÁËÒ»±¾ÌÖÂÛ Web ºÍ CGI ·Ç³£ºÃµÄÊ飬½Ð How To Set Up and Maintain a World Wide Web Site¡£

¡¾ÒëÕß¡¿ ½¨Òé¶ÁÕß¶àʹÓà CGI.pm ¡£CGI::* ÒѾ­Óкܳ¤Ò»¶Îʱ¼äûÓиüÐÂÁË£¬¶ø CGI.pm Ôò²»¶ÏµÄÓиÄÁ¼µÄаæÍƳö£¬²¢ÒѼÓÈë¶Ô FastCGI µÄÖ§Ô®£¬Òò´Ë¶Ô FastCGI µÄʹÓà ÕßÒ²Ï൱·½±ã¡£´ËÍ⣬mod_perl £¨Apache µÄ perl module£©ÖÐËù¸½µÄ CGI::XA£¬Ò²ÊÇÓÉ CGI.pm ¸Ä½ø¶øÀ´µÄ¡£ CGI.pm ÈÃʹÓÃÕßÃâ³ý×Ô¼º×öµÍ½××ÊÁÏ´¦Àí £¨ÈçÓ¡ HTTP ±êÍ·¡¢Ìæ form, cookies ×ÊÁϽâÂëµÈ£©µÄÂé·³¡£

CGI::* Ä£×éÌ×¼þ
ÕâЩģ×éÔ­ÏÈ´ó¶àÊÇÓÉ Tim Bunce Ëùд£¬ÏÖÔÚÔòÓÉ Lincoln Stein À´¸ºÔð ά»¤¡£ËüÃǵŦÄܰüÀ¨Á˰ïÄú²úÉú¼°´¦Àí form £¬Ìæ CGI ³Ìʽ³ý´í£¬ÒÔ¼°ÔÚ²»Í¬µÄ forms Ö®¼äάϵһ¸ö״ֵ̬¡£
CGI Lite
Õâ¸öÇáÁ¿¼¶µÄ module ÊÇ CGI::* modules Ö®ÍâµÄÁíÒ»¸öÑ¡Ôñ¡£Ëü¿ÉËãÊÇÔÚÀÏ¾ÉµÄ cgi-lib.pl Ö®ÉϸÄÁ¼¡¢¼ÓÁÏááµÄ²úÎï¡£

ÒÔÉÏÈþÕß¾ùÓÐÄÜÁ¦´¦Àí multipart form ×ÊÁÏ£¨¼´ÉÏ´«£©¡£


Q2.5: Ϊʲ÷áÕâ÷á¶à perl CGI libraries ¶¼ÊÇ object-oriented £¨Îï¼þµ¼Ïò£©µÄ£¿ÎÒ¶ÔÓÃÎï¼þµ¼ÏòÀ´Ð´³ÌʽһÇϲ»Í¨¡£ÄѵÀ¾ÍûÓмòµ¥Ò»µã£¬¸ø²»»áÎï¼þµ¼ÏòµÄÈËʹÓÃµÄ libraries Âð£¿Îï¼þµ¼ÏòÓжàÄÑ£¿

ÆäʵʹÓÃÎï¼þµ¼ÏòµÄ modules ²¢²»ÄÑ¡£ÏÈÈ¥¿´¿´ Tom Christiansen µÄ Easy Intro to Using Perl Objects £¨¼òµ¥½éÉÜÈçºÎʹÓà Perl Îï¼þ£©°É¡£

ǰͷÌáµ½µÄ CGI modules ÓÃÆðÀ´ÕæµÄÊǺÜÈÝÒ×£¡ÕâÀïÓÐÒ»¸öÓà CGI Lite Ó¡³ö form ×ÊÁϵÄʵÀý*£º

¡¾ÒëÕß¡¿CGI.pm µÄʹÓÃ˵Ã÷ÖÐÓиü¶à·¶Àý¿É¹©²Î¿¼¡£



#!/usr/local/bin/perl -w



use CGI_Lite;



$cgi = new CGI_Lite;

%data = $cgi->parse_form_data;



print "Content-type: text/plain", "\n\n";



foreach $key (keys %data) {

    print $key, " = ", $data{$key}, "\n";

}



exit 0;

ҪעÒâµÄÊÇ£¬¼´Ê¹Äú»úÆ÷É쵀 Perl ²»ÊÇÄú×°µÄ£¨Äú²»ÊÇϵͳ¹ÜÀíÕߣ©£¬»òÊÇÄúȨÏÞ²» ¹»ÎÞ·¨½«ÕâЩ modules ºÍÆäËûµÄ Perl library µµ°¸°²×°ÔÚͬһ¸öµØ·½£¬Äú»¹ ÊÇ¿ÉÒÔʹÓÃÕâЩ modules µÄ -- Ö»Òª½«ËüÃǰÚÔÚÒ»¸ö×Ô¼º·½±ãµÄµØ·½£¬È»ááÔÚ ÄúµÄ script ¿ªÊ¼´¦¼ÓÉÏ*£º



BEGIN {

    unshift @INC, "/your/dir/favorite/place";

}

¡¾ÒëÕß¡¿½¨Òé¸ÄÓýÏеķ½Ê½£º



use lib qw(/your/dir/favorite/place);

ºÃ¡£ÒÔÏÂÊÇÒ»¸öÓõ½ CGI::* modules µÄÀý×Ó£º



#!/usr/local/bin/perl -w



use CGI::Form;



$cgi_form = new CGI::Form;



print <<'End_of_Header';

    <HTML>

    <HEAD><TITLE>¿´×ÅÎÒ×ö£¡</TITLE></HEAD>

    <BODY>

    <H1>¿´×ÅÎÒ×ö£¡</H1>

End_of_Header



print $form->startform;



## ²úÉúÒ»¸öµ¥ÐÐÊäÈëÀ¸Î» (text field)



print 'ÐÕÃû£º ';

print $form->textfield('name'), "<BR>\n";



## ²úÉúÒ»×鵥ѡ°´Å¦ (radio buttons)



print '<P>ÄúסÄĶù£º <BR>';

print $form->radio_group(-name      => 'where',

                         -values     => ['±±ÃÀÖÞ',

                                        'ÄÏÃÀÖÞ',

                                        'Å·ÖÞ',

                                        '°ÄÖÞ',

                                        'ÑÇÖÞ',

                                        'Äϼ«ÖÞ'],

                         -default    => '±±ÃÀÖÞ',

                         -linebreak => 'true');



## ²úÉúÒ»¸ö¶àÐÐÊäÈëÀ¸Î» (textarea)



print 'Òâ¼û£º ';

print $form->textarea('comments', undef, 5, 40);



print "<P>";

print $form->reset;

print $form->defaults;

print $form->submit('Ëͳö£¡', 'Submit');

print $form->endform;



print "</BODY></HTML>";

reset¡¢defaults£¬¼°submitÈþÖÖ·½·¨( methods ) »á²ú Éú²»Í¬µÄÀàÐ͵İ´Å¥¡£reset Õâ¸ö°´Å¥ÈÃÄú°ÑĿǰ form À¸Î»ÖÐËùÌîµÄ×ÊÁÏÏ´µô£¬ ²¢ÏÔʾÊôì¶ÉÏÒ»¸ö״̬£¨»ò»ØºÏ£©µÄ×ÊÁÏ¡£ defaults Õâ¸ö°´Å¥ÔòÊǽ«form À¸Î» ×ÊÁϳ¹µ×Ï´È¥¡£»¹ÓÐ submit Õâ¸ö·½·¨²úÉúÒ»¸öËͳöÅ¥ÒÔ±ãÈÃÈ˽«×ÊÁÏËÍÖÁ server ´¦¡£

Äú¿´£¬²»ÊǺÜÈÝÒ×Âð£¿

3.0 - CGI Óë WWW Server


Q3.1: ÎÒµÄ Perl CGI ³ÌʽҪ·ÅÔÚÄÄÀïÖ´ÐУ¿cgi-bin Õâ¸öĿ¼ÊÇ×öÉõ÷áÓõģ¿

server ͨ³£ÊÇÉ趨³ÉÈ¥Ö´ÐзÅÔÚ ``cgi-bin'' Ŀ¼µ×Ï嵀 CGI ³Ìʽ¡£²»¹ý£¬ server ¹ÜÀíÕßͬʱҲ¿ÉÒÔÔÚÉ趨µµÖÐÉ趨 aliases£¬ÈÃËùÓк¬Ä³Ð©¸±µµÃû£¨Èç .cgi¡¢.pl£©µÄ scripts ¶¼ÄÜÖ´ÐÐ*¡£

¡¾ÒëÕß¡¿É趨 CGI aliases ºÍ¸±µµÃû¹ÌÈ»ºÜ·½±ã£¬µ« server ¹ÜÀíÕßÐë×¢Òâµ½Ïà ¹ØµÄ°²È«ÎÊÌâ¡£


Q3.2: ʲ÷áÊǵµ°¸Ê¹ÓÃȨÏÞ£¿ÔõÑù¸Ä£¿

µµ°¸È¨ÏÞÊǸù¾ÝʹÓÃÕßʶ±ð´úºÅ£¨ÓÖ³Æ uid£©£¬ÒÔ¼°ËûÃÇËùÊôµÄÍÅÌåÀ´¾ö¶¨ÊÇ·ñ¸³ ÓëʹÓÃÕß¶Á¡¢Ð´£¬ºÍÖ´ÐÐijµµ°¸µÄȨÀû¡£Äú¿ÉʹÓà chmod Õâ¸öÖ¸ÁîÈ¥Ð޸ĵµ°¸µÄ ʹÓÃȨÏÞ¡£ÀýÈ磺

% ls -ls form.cgi



  1 -rwx------  1 shishir       974 Oct 31 22:15 form.cgi*

´ËÒ»µµ°¸µÄȨÏÞΪ 0700£¨°Ë½øÖÆ£©£¬Òâζ×ÅûÓÐÈË£¨µµ°¸ËùÓÐÈ˳ýÍ⣩Äܹ»¶ÁÈ¡¡¢ д½ø£¬»òÖ´ÐÐÕâ¸öµµ°¸¡£ÎÒÃÇ¿ÉÒÔÓà chmod Õâ¸öÖ¸ÁîÈ¥ÐÞ¸ÄËüµÄȨ ÏÞ£º



% chmod 755 form.cgi

% ls -ls form.cgi



  1 -rwxr-xr-x  1 shishir       974 Oct 31 22:15 form.cgi*

ÕâÑùÒ»À´£¬È¨Ï޾ͱäÁË¡£ÏÖÔÚºÍ ``shishir'' ÔÚͬһ¸öÍÅÌåµÄʹÓÃÕߣ¬»¹ÓÐÆäËû ÈκεÄʹÓÃÕß¶¼ÓÐȨÀûÈ¥¶ÁÈ¡ºÍÖ´ÐÐÕâ¸öµµ°¸ÁË¡£

ÈçÓûÖª chmod Ö¸Áî¸÷°Ë½øÖÆÊýÂëËù´ú±íµÄº¬Ò⣬Çë²ÎÔÄ chmod manpagesµÄ˵Ã÷¡£


Q3.3: Perl Ó¦¸Ã°²×°ÔÚÄÄÀï²Å¿ÉÒÔÖ´ÐÐËü£¿

Perl ¿ÉÒÔ°²×°ÔÚϵͳÉÏÈκÎÒ»¸ö½ÇÂ䣡ÄúΨһҪעÒâµÄÊÇ server ²»ÄÜÔÚchroot µÄ»·¾³ÏÂÅÜ£¬·ñÔòËü±ãÎÞ·¨ÅÜ perl ½âÒëÆ÷¡£»»ÑÔÖ®£¬ÏµÍ³¹ÜÀíÕß¿ÉÒ԰ѸùĿ¼ ¸Ä±ä£¬Èà ``/'' Ö¸µ½ÁíÒ»¸öĿ¼£¬¶ø²»ÊÇʵ¼ÊÕæÕýµÄ¸ùĿ¼(``/'')¡£


Q3.4: ÎÒΪʲ÷áÒ»Ö±µÃµ½ ``Server: Error 500'' µÄѶϢ£¿

ÒÔϼ¸ÖÖÇéÐλᴥ·¢Õâ¸ö´íÎóѶϢ£º


Q3.5: ÎÒÊÔ×Å´ò¿ªÒ»¸öµµ°¸£¬Ïë°Ñ×ÊÁÏ´¢´æÔÚÀïÍ·£¬µ«ÊÇ open() µÄÖ¸Áîʧ°ÜÁË¡£µ½µ×ÊÇÔõ÷á¸ãµÄ£¿

Ò»°ã˵À´£¬HTTP server ÊÇÒÔ ``nobody''¡¢``www''£¬»òÆäËûÕâÀàȨÏ޵͵ÄʹÓà ÕßµÄÉí·ÝÀ´Åܵġ£ÒòΪÕâ¸öÔµ¹Ê£¬Äú´òËãÔÚÆäÖÐÖÆÔìеµ°¸µÄĿ¼£¬¶Ô server ÅÜµÄ Ê¹ÓÃÕß ID ±ØÐëÒªÊÇ¿Éд(writable)²ÅÐС£

ΪÁËÈ·¶¨Æð¼û£¬Äúÿ´Î¶¼Ó¦¸ÃÏȼì²é open Õâ¸öÖ¸ÁîËͻصĽáÊø×´Ì¬(return status)£¬¿´¿´ open ÓÐûÓгɹ¦¡£



open(FILE, "/abc/data.txt")

    || error("Could not open file /abc/data.txt");



.

.

.



sub error {

    my($message) = @_;



    print <<End_of_Error;

Content-type: text/html

Status: 500 CGI Error



<HTML>

<HEAD><TITLE>CGI Error</TITLE></HEAD>

<BODY>

<H1>Oops! Error</H1>

<HR>

$message

<HR>

</BODY>

</HTML>



End_of_Error

}

4.0 £­ ³ÌʽÉè¼ÆÒÉÄÑÔÓÖ¢


Q4.1: ÎÒÏëÈà user ÌîµÄ form ×ÊÁÏ×Ô¶¯¼Ä¸øÎÒ£¬¸ÃÔõ÷á×ö£¿ÓÐûÓз¶Àý£¿

Æäʵ×öÕâ¸öºÜÈÝÒס£ÄúµÄ CGI script ±ØÐëÄÜ×öµ½ÕâÁ½¼þÊ£º

  1. ½« form ÖеÄ×ÊÁÏÕûÀí³öÀ´¡£±ðÍüÁË£¬ËùÓÐµÄ form ×ÊÁ϶¼»á±» URL-±àÂëÆðÀ´ £¨ÏȲ»¿¼ÂÇ Netscape 2.0 ¡¾¼° 2.0 ÒÔÉÏËùÖ§Ô®¡¿µÄ multipart MIME×ÊÁÏ£©¡£
  2. ¿ªÒ»¸ö¹Ü· (pipe) µ½ mail £¨»ò sendmail £©£¬È»áá°Ñ form ×ÊÁÏд¹ýÈ¥¡£

    ÎÒÃǾͼÙÉèÄúÓõÄÊÇ CGI::* Ä£×é¡£Äú¿ÉÓÃÒÔÏµķ½·¨È¥½Ð sendmail£º



    $cgi_form = new CGI::Form;



    $from     = $cgi_form->param('from');

    $name     = $cgi_form->param('name');

    $to       = $cgi_form->param('to');

    $subject  = $cgi_form->param('subject');

    $message  = $cgi_form->param('message');



    open SENDMAIL, "| /usr/bin/sendmail -t -n";

    print SENDMAIL <<End_of_Mail;

    From: $from <$name>

    To: $to

    Reply-To: $from

    Subject: $subject



    $message

    End_of_Mail

    ÓÐÒ»¸ö¸Ã×¢ÒâµÄµØ·½ÊÇ ``Reply-To:'' µÄÐÅÍ·¡£ÓÉì¶ server ÊÇÒÔ ``nobody''Õâ ¸öʹÓÃÕßµÄÉí·ÝÀ´ÅÜ£¬ÐÅÍ·µÄµØ·½¿ÉÄܻᱻ¸ã»µ£¨ÓÈÆäÊǵ±ÓÐÈËÏë»ØÕâ·âÐŵÄʱáᣩ¡£ ¼ÓÉÏ ``Reply-To'' µÄÐÅÍ·Õâ¸öÎÊÌâ±ã½â¾öÁË¡£

    ÍøÂ·ÉÏÓÐÐí¶àµÄ mail ÇþµÀ (gateway)* ÊÇÒÔµ×ÏÂÕâÖÖ·½·¨À´ËÍ mail£º

    ¡¾ÒëÕß¡¿gateway ÔÚ´ËÖ¸ËÍ email µÄ CGI ³Ìʽ



    open MAIL, "| mail -s 'Subject' $to";



                                      ^

                                      |

                                      +-- ¿ÉÄÜ»á³öÎÊÌâµÄ©¶´£¡£¡£¡

    Èç¹ûÄúûÓÐÏȼì²é¿´ $to Õâ¸ö±äÊýÓÐûÓÐÄÚº¬ shell µÄÌØÊâ·ûºÅ (metacharacters)£¬ÄúÊÇÔÚ×ÔÌÖ¿à³Ô£¡Æ©È磬Èç¹ûÄĸö¶ñÁ user ÊäÈëÁËÒÔϵÄ×Ê ÁÏ£º

    ; rm -fr / ;

    ÄÇ÷áÄúµÄÂé·³¿É´óÁË*¡£

    ¡¾ÒëÕß¡¿ÕâÀïÍ·µÄ ``;'' ±ãÊÇÒ»¸öΣÏÕµÄ shell metacharacter¡£ÁíÒ»¸öΣÏյķûºÅÊÇ ``&''¡£

    ÔÚÕâ¸ö¼ÙÏëµÄÇé¿öÖУ¬ÓжàÉÙ¸öµµ°¸»á±»Ô¶·½µÄ user ¸øÉ±µô£¬»¹µÃÊÓ server ÅܵÄʹÓÃÕßµÄȨÏÞ¶ø¶¨£¨Õâ¾ÍÊÇΪʲ÷á server ÒªÒÔµÍȨÏÞʹÓÃÕßÉí·ÝÅܵÄÔ­Òò£©¡£ ÖÁÉÙÄÇЩÓÉ CGI ³ÌÊ½ÖÆÔì³öÀ´£¬µ«ÓÖûÓб¸·ÝµÄµµ°¸£¬ÊÇÕæµÄÒª¸úËüÃÇÓÀ±ðÁË¡£

    ; mail joe@crackerland.org </etc/passwd

    ÄÇÄúµÄ CGI script ¾ÍÌæÄú°Ñ /etc/passwd ¸ø¹°ÊÖËÍÉÏÁË¡£Õâ¶ÔÒ»¸ö¡¸Î´¼Ó¹¤¡¹µÄ Linux¡¢SunOS 4.1£¬»¹ÓÐÆäËûÈκÎû°²×° shadow-password µÄ UNIX ϵͳÀ´Ëµ£¬ ʵÔÚ²»Ì«ºÃÍæ¡£Èç¹û server ´íÎóµØÅÜÁË root£¬ÄÇ÷á¾ÍËã×°ÁË shadow-password ҲûÓÐÓã¬ÒòΪԶ·½µÄ cracker ÉõÖÁ¿ÉÒÔÈÃÕâ¸ö CGI µÄ email script ¸øËûËÍ /etc/shadow £¨ÊÓϵͳ¶ø¶¨£¬²»Ò»¶¨ÔÚ /etc µ×Ï»ò½ÐÕâ¸öÃû×Ö£©¡£


    Q4.2: ¸Õ²ÅÕâ¸öÓà form ËÍÐÅµÄ script ¿´ÆðÀ´ÓеãÄÑ¡£ÎªÊ²÷᲻Ǭ´àÓà ``mailto: URL''£¬ÕâÑù user ÌîÈëµÄ×ÊÁϾͿÉÒԼĸøÎÒÁË£¿

    ºÜ²»Ðҵأ¬mailto: µÄÖ¸Áî²¢²»ÊÇËùÓеÄä¯ÀÀÆ÷¶¼Ö§Ô®¡£Èç¹ûÄúÔÚµµ°¸ÖÐÓÃÁËËüµÄ»°£¬ »áÏÞÖÆÁËÄÇЩʹÓÃûÓÐÖ§Ô® mailto: µÄä¯ÀÀÆ÷µÄÈË£¬ÈÃËûÃÇÎÞ·¨ËÍ mail ¸øÄú*¡£

    ¡¾ÒëÕß¡¿¾¡¹ÜÈç´Ë£¬Äú»òÐí²»»áÔÚºõÄÇÕ¼¼«ÉÙÊý±ÈÀýµÄʹÓÃÕߣ¨Netscape ¡¢ IE£¬ ºÍ lynx µÈä¯ÀÀÆ÷¶¼Ö§Ô® mailto: £©¡£


    Q4.3: ÎÒÒªÈçºÎÔÚ UNIX ÒÔÍâµÄƽ̨ÉÏ×ö Perl-CGI£¬Æ©Èç Mac¡¢MS-DOS¡¢ Windows ¼° NT£¿ÎÒµÄ Perl CGI ³ÌʽÄܲ»ÄÜÔÚÕâЩƽ̨֮¼ä»¥ÏàÒÆÖ²ÄØ£¿Äܲ»ÄÜ ºÜÖ±½Ó£¬Ã»ÓÐÂé·³£¿ÎÒÔÚ UNIX Ö÷»úÉÏÓÐÕʺţ¬µ«ÊǶ¼ÊÇÏÈÔÚ Windows/Mac ÉÏ×ö¡£ ÎÒÒªÈçºÎÔÚÎÒ×Ô¼ºµÄ»úÆ÷ÉϲâÊÔдºÃµÄ CGI scripts*£¿

    Perl ÒѾ­±»ÒÆÖ²µ½ÉÏÊöËùÓÐµÄÆ½Ì¨ÉÏÁË¡£Òò´Ë£¬ÄúµÄ Perl CGI ³ÌʽÕÕÀíÓ¦²»ÄÑ ÒÆÖ²¡£µ«Èç¹ûÄúʹÓõ½Ò»Ð© UNIX ÉϵijÌʽ£¬ÄÇ÷áÄúµÄ³Ìʽ¿ÉÄܻ᲻ºÃÒÆÖ²¡£Èç¹û ÄúÖ»ÊÇ×ö×ÊÁÏ´¦Àí£¬»ò¿ªÆô¡¢¶Á½øµµ°¸µÈµÄ»°£¬ÄÇ÷áÒÆÖ²Ó¦¸Ã²»»áÓÐÎÊÌâ¡£

    ¡¾ÒëÕß¡¿Ô­ FAQ ²¢Î´»Ø´ð×îááÕâ¸öÎÊÌâ¡£ÒªÔÚ Windows/OS2/Mac µÈ·Ç UNIX ƽ̨ ÉϲâʽÄúµÄ scripts £¬Äú¿ÉÒÔʹÓà CGI.pm £¨Ö§Ô®ÒÔÉÏËùÓÐÆ½Ì¨£©£¬ÅäºÏ Q4.19 ÖÐÌáʾµÄ³ý´í¼¼ÇÉ £¬»òÔÚ×Ô¼ºµÄ»úÆ÷Éϰ²×° HTTP server ÈíÌå¡£Èç´Ë¾Í²»ÓÃÐÁ¿àµÄÁ¬ÉÏÖ÷»úÈ¥²âʽÁË¡£


    Q4.4: ÔÚ Perl CGI ³ÌʽÖУ¬STDERR £¨±ê×¼´íÎóѶϢ)¡¢STDIN (±ê×¼ÊäÈ룩£¬ºÍ STDOUT £¨±ê×¼Êä³ö£© ¸÷ÊÇÁ¬µ½ºÎ´¦£¿

    ÔÚ CGI »·¾³Ï£¬STDERR »áÖ¸Ïò server µÄ ´íÎóѶϢµµ (error log)¡£Äú¿ÉÒÔÉÆ ¼ÓÀûÓÃÕâ¸öÌØÐÔ£¬°Ñ³ý´íµÄѶϢдµ½ STDERR£¬È»ááÄú±ã¿É½å²é¿´´íÎóѶϢµµÀ´°ï Äú³ý´í¡£

    STDIN ºÍ STDOUT Ôò¶¼ºÍä¯ÀÀÆ÷ÏàÁ¬¡£Êµ¼ÊÉÏ£¬STDIN Á¬µÄÊÇ server¡£ server »áÏȽâ¶Á client £¨»òä¯ÀÀÆ÷£©ËͳöµÄÇëÇóºÍ×ÊÁÏ£¬ÔÙ½«ÆäË͸ø script¡£

    ÄúÒ²¿ÉÒÔÓý« STDERR ¡¸¸´ÖÆ¡¹µ½ STDOUT µÄ·½·¨À´×¥´íÎóѶϢ¡£ÕâÓ¦¸ÃÔÚ script ¿¿Ç°Í·µÄµØ·½×ö£¨µ«Ó¦ÔÚÄúÊä³öºÏÊ浀 HTTP ±êÍ·Ö®áᣩ£º



    open STDERR, ">&STDOUT";

    Õâ»á½«ËùÓеĴíÎóѶϢ¶¼×ªË͵½ STDOUT £¨¼´ä¯ÀÀÆ÷£© È¥¡£


    Q4.5: ÈçºÎд¼ÆÊýÆ÷£¿

    ¼ÆÊýÆ÷Ò»ÀàµÄ³ÌʽÏ൱Á÷ÐС£Æäʵ¼ÆÊýÆ÷µÄÔ­ÀíºÜ¼òµ¥£¬²»¹ýÊÇ£º

    ÒÔÏÂÊÇÒ»¸ö¼òµ¥µÄ¼ÆÊýÆ÷µÄʵÀý£º



    #!/usr/local/bin/perl -w



    $counter = "/home/shishir/counter.dat";

    print "Content-type: text/plain", "\n\n";



    open(FILE, $counter) || die "Cannot read from the counter file.\n";

    flock FILE, 2;

    $visitors = <FILE>;

    flock FILE, 8;

    close FILE;



    open(FILE, ">$counter") || die "Cannot write to counter file.\n";

    flock FILE, 2;

    print FILE $visitors;

    flock FILE, 8;

    close FILE;

    ÏÖÔÚÄú¿ÉÒÔÔÚ HTML µµ°¸ÖÐÓà SSI (Server Side Include; ËÅ·þ¶Ë²åÈë)* µÄ·½Ê½À´ÏÔʾ¸Ã¼ÆÊýÆ÷£º

    ¡¾ÒëÕß¡¿SSI ÊÇ server ËùÌṩµÄÒ»ÏÄÜ£¬¿É½«¶¯Ì¬×ÊÁÏ£¬ÀýÈçÈÕÆÚºÍʱ¼ä£¬»ò ¼ÆÊýÆ÷ÏÔʾµÈ£¬ÔÚ¿Í»§ÇëÇóÒ»ÍøÒ³Ê±¼´Ê±¼ÓÈë¸ÃÎļþÖС£Ö§Ô® SSI µÄ servers °ü À¨ÁË NCSA¡¢Apache£¬ºÍNetscape Enterprise Server µÈ¡£ SSI ¹ÌÈ»ÊÇÒ»Ïî±ãÀûµÄÉè¼Æ£¬µ«Èç¹ý·ÝÀÄÓà £¬²»µ«»á¼õµÍ server ÐÔÄÜ£¬¸ü¿ÉÄÜÕÐÀ´°²È«ÉϵÄΣ»ú¡£



    ÄúÊǵÚ

    <!--#exec cgi="/cgi-bin/counter.pl-->

    λ¹âÁÙ±¾Õ¾µÄ¿ÍÈË¡£


    Q4.6: ÒªÈçºÎÓÃÒ»¸ö Perl µÄÈ¡´úÖ¸ÁËùÓÐ HTML ±êÇ©´ÓÒ»·ÝÎļþÖÐɾ³ý£¿

    ÒÔÏÂÕâ¸ö¼òµ¥µÄ regular expression ¿ÉÓÃÀ´È¥³ý HTML ±êÇ©*£º

    ¡¾ÒëÕß¡¿

    1. ÒªÈÃÕâ¸ö regular expression ¿çÐÐÖ´ÐУ¬Äú±ØÐëÏȽ«ÄúµÄ script ÓÉÔ¤ÉèµÄ °´ÐÐÖ´ÐÐģʽ (line mode) ¸ÄΪ°´¶ÎÖ´ÐÐģʽ (paragraph mode)¡£Äú¿ÉÒÔÔÚÖ¸Áî ÁÐÒÔ£º



      perl -00 -we '...'

      µÄ·½Ê½£»»òÊÇÔÚ script ÖÐÒÔ£º



      #!/usr/bin/perl -00

      »ò



      $/ = "";

      µÄ·½Ê½À´É趨°´¶ÎÖ´ÐÐģʽ¡£

    2. ³ý·ÇÄúÐèÒª¶ÔÓûɾ³ýµÄ HTML ±êÇ©ÖеÄÄÚÈÝ×ö½øÒ»²½µÄ´¦Àí»òÀûÓ㬷ñÔò±¾Àý ÖÐ×îÍâΧµÄÒ»¶ÔÀ¨»¡¿ÉÈ¥µô¡£

    $line =~ s/<(([^ >]|\n)*)>//g;

    ÏêϸµÄÏà¹Ø×ÊÁÏ£¬Çë¿´ Tom [Christiansen] µÄ striphtml ³Ìʽ£¬ Õâ¸ö³ÌʽͬʱҲÊÕ¼ÔÚËûµÄtour of perl5 regexps ½²ÒåÖС£


    Q4.7: ÒªÈçºÎÖªµÀÊÇË­£¯ÄĄ̈»úÆ÷£¯Äĸöä¯ÀÀÆ÷Ö´ÐÐÁËÎҵijÌʽ£¿

    Äú¿ÉÒÔ´Ó HTTP_USER_AGENT Õâ¸ö»·¾³±äÊýµÃ֪ʹÓÃÕßËùÓõÄä¯ÀÀÆ÷¡£

    ¡¾Õª×Ô WWW FAQ¡¿

    ÄúµÄ CGI script ¿ÉÒÔÀûÓÃÎå¸öÖØÒªµÄ»·¾³±äÊýÀ´°ïæ±æÊ¶Ê¹ÓÃÕßµÄÉí·Ý¡£

    ¡¾ÕªÂ¼×Ô WWW FAQ ²¿·ÝÍê¡¿


    Q4.8: È˼ҿ´µÃµ½ÎÒµÄ Perl CGI ³ÌʽÂð£¿Èç¹ûÊÇÕâÑùµÄ»°£¬ÄDz»¾ÍÈÃËûÃÇÖªµÀÎҵijÌʽÊÇÔõ÷áÔË×÷µÄÁË¡£ÕâÊǸö°²È«Â©¶´Âð£¿ÎÒÒªÔõ÷á°ÑËüÒþ²ØÆðÀ´£¿

    Èç¹ûÄú½«ÄúµÄ server Éè³É¶ÔËùÓÐÔÚÒ»¸öÌØ¶¨Ä¿Â¼£¨Èç cgi-bin£©Ïµĵµ°¸£¬»òÕß ÊǾßÓÐijЩ¸±µµÃû£¨Èç ``.pl''¡¢``.tcl''¡¢``.sh''£©µÄµµ°¸Ò»Âɶ¼ÒÔ CGI ³Ìʽ¿´ ´ý£¬ÄÇ÷á server Ö»»áÖ´ÐÐÕâЩ³Ìʽ¡£ÖÁì¶Ê¹ÓÃÕßÊÇÎÞ·¨¿´µ½ script ±¾ÉíµÄÄÚÈÝ µÄ¡£

    µ«ÊÇÈç¹ûÄúÔÊÐíÈËÃÇ¿´ÄúµÄ script (Æ©Èç°ÑËü·Åµ½ HTML ÎļþµÄ¸ùĿ¼ ÏÂ)£¬ÄÇ÷áÖ»ÒªÊÇÕâ¸ö³ÌʽûÓа²È«ÉϵÄ©¶´£¬Õâ²¢²»ÄÜËãÊǰ²È«ÎÊÌâ¡£Èç ¹ûÕâ¸ö³ÌÊ½ÕæµÄÓа²È«ÉÏµÄÆÆÕÀ¶øÄúÓÖÔÊÐíʹÓÃÕß¿´Õâ¸ö³Ìʽ£¬ÄÇ÷áËûÃDZãÓлú¿É ³Ë£¬½ø¶øÀûÓÃÕâ¸öÈõµã¡£

    ¡¾ÒëÕß¡¿ÉÏÃæÕâ¶ÎÔ­ÎÄ×÷ÕßÊǾÍÔ¶·½µÄ¿Í»§¶ËµÄʹÓÃÕß¶øÑÔ¡£ºÍÕâ¸öÖ÷ÌâÏà¹ØµÄÒ» ¸ö³£ÎÊÎÊÌâÊÇ£º

    Q: ÎÒµÄ Perl CGI scripts ±ØÐ뽫ȨÏÞÉèΪȫÊÀ½ç¿É¶Á¡£¿ÉÊÇÕâÑùÒ»À´£¬ºÍÎÒͬ »úÆ÷ÓÐÕÊ»§µÄÈË£¬Ö»ÒªÖªµÀÎҵijÌʽÃû³Æ£¬¾Í¿ÉÒÔä¯ÀÀÎÒµÄ Perl ³ÌʽµÄÄÚÈÝ£»ÓÈ Æäµ±ÆäÖÐÇ£Éæµ½ÃÜÂëµÄÎÊÌâʱ¡£

    A: ÖÁÉÙÓÐÁ½¸ö½â¾ö·½·¨£¬Ò»¸ö¼òµ¥£¬Ò»¸ö¸´ÔÓ£º

    ¼òµ¥µÄ·½·¨ÊÇ£¬ÇëÄúµÄϵͳ¹ÜÀíÕߣ¨Èç¹û²»ÊÇÄú×Ô¼ºµÄ»°£©£¬½«ÄúµÄ CGI scripts ¼°ÃÜÂëµµ£¨Èç¹ûÄúÑ¡Ôñ½«ÃÜÂë´æ·ÅÔÚÁíÒ»¸öµµ°¸Öеϰ£©µÄËùÓÐÕßÉè³É Web server ÅܵÄʹÓÃÕߣ¨×î³£¼ûµÄÊÇʹÓÃÕß nobody £»Ê¹ÓÃȺ nogroup »ò nobody£©£¬ È»áὫ CGI scripts µÄʹÓÃȨÏÞÉ趨³É 550 (-r-xr-x---)£¬ÃÜÂëµµµÄȨÏÞÉè³É 440 (-r--r-----)¡£Èç´ËÒ»À´£¬Ò»·½ÃæÄúµÄ³ÌʽµÃÒÔÖ´ÐУ¬¶øÇÒÆäËûͬ»úÆ÷ÉÏµÄ Ê¹ÓÃÕßҲûÓа취͵¿´µ½ÄúµÄ³ÌʽºÍÃÜÂë¡£

    ±È½Ï¸´ÔӵĽâ¾ö·½·¨ÊÇÏÈÌô¸öÄÑÆÆµÄÃÜÂ뽫Õû¸ö³Ìʽ¼ÓÃÜÆðÀ´£¬È»ááÔÙʹÓà Filter::decrypt Õâ¸öÄ£×éÔÚÁÙÖ´ÐÐǰ½«Æä½â¿ª£¬Ôڴ˲»¶à˵¡£ÓÐÐËȤµÄ¶ÁÕßÇë¿´ Filter::decrypt µÄʹÓÃ˵Ã÷£»´ËÍâÐ嵀 perl FAQ µÚÈþ²¿·ÖÖÐÕâÒ»¶Î£º``How can I hide the source for my Perl program?'' £¬´ó¼ÒÒ²¿É²Î¿¼¡£


    Q4.9: ÎÒÐèÒª½«Õû¸ö Perl library ¶¼¸´ÖƵ½ÎÒµÄ htdocs Ŀ¼µ×ÏÂÂð£¿

    ²»ÐèÒª¡£ÄúµÄ CGI scripts ¿ÉÒÔʹÓà server ºÍ Îļþ¸ùĿ¼֮ÍâµÄÈκεµ°¸£¬³ý ·Ç server ÊÇÔÚÒ»¸ö chroot µÄ»·¾³ÏÂÖ´ÐС£


    Q4.10: ÎÒΪʲ÷á²»¸Ã½ÐʹÓÃÕßÊäÈëËûÃǵÄÃÜÂë»òÉí·ÝÖ¤×ֺŻòÐÅÓÿ¨ºÅÂ룿ÓÐÒ»¸ö TYPE="password" ²»ÊǾÍÊÇÄÃÀ´×öÕâ¸öµÄÂð£¿

    No! form µÄ½éÃæÖÐÓÐÒ»¸ö ``password'' µÄÀ¸Î»£¬µ«ÊÇÄú²»Ó¦¸ÃÄÃËüÀ´´¦ ÀíÈκλúÃÜÐÔµÄ×ÊÁÏ¡£²»¸ÃÕâ÷á×öµÄÔ­ÒòÊÇÒòΪËùÓÐµÄ form ×ÊÁÏ(°üÀ¨ ``password'' À¸) ¶¼ÊÇÒÔ´¿ÎÄ×ÖÐÎʽ£¬¶ø·ÇÒÔ¼ÓÃÜÐÎʽÓÉä¯ÀÀÆ÷ËÍÖÁ server¡£

    Èç¹ûÄúÏëÒª°²È«µØ´«ËÍ×ÊÁÏ£¬ÄÇ÷áÄúÐèҪʹÓþßÓа²È«¹¦ÄÜµÄ server£¬ÀýÈç Netscape µÄ Commerce Server*¡£

    ¡¾ÒëÕß¡¿Apache SSL £¬ÀýÈç Stronghold °æ£¬Í¬Ñù¾ßÓÐÕâ¸ö¹¦ÄÜ¡£


    Q4.11: ÎÒÒªÈçºÎ²úÉúרÃÅÌæ Netscape Éè¼ÆµÄÍøÒ³£¬ÒÔ±ðì¶ÊÀÉÏÆäËûµÄä¯ÀÀÆ÷£¿

    Äú¿ÉÒÔ͸¹ý HTTP_USER_AGENT Õâ¸ö»·¾³±äÊýÔÚÄúµÄ CGI script ÖеÃÖªÊÇ·ñ Netscape ÕýÔÚÖ´ÐÐÄúµÄ script¡£ÒÔÏÂΪһÀý£º



    $browser = $ENV{'HTTP_USER_AGENT'};



    if ($browser =~ /Mozilla/) {

        #

        # Netscape

        #

    } else {

        #

        # Non Netscape

        #

    }


    Q4.12: Ϊʲ÷áÎÒµÄ system() Ëù²úÉúµÄ×ÊÁÏÊä³ö˳Ðò²»¶Ô£¿

    ÕâÊÇÓÉì¶±ê×¼Êä³öµÄ²úÉú·½Ê½Í¨³£ÊÇÏÈÀÛ»ýÏ൱µÄ×ÊÁÏÔÙÊä³ö(buffered)¡£Òª ÈÃÊä³öµÄ×ÊÁÏÒÔÕýÈ·µÄ˳ÐòÏÔʾ£¬Äú±ØÐë½åÓÉ $| Õâ¸ö±äÊýµÄÉ趨½« buffering µÄ ÌØÐԹصô¡£


    Q4.13: ÎÒÌý˵ Netscape »áÖ§Ô® Java*¡£ÕâÊDz»ÊÇ˵ÎÒÏÖÔÚµÃÆú Perl£¬¸Ä Java ÁË£¿ÊDz»ÊǸÃÕâ÷á×ö£¿

    ¡¾ÒëÕß¡¿Ô­ FAQ ÒÑÓÐÏ൱һ¶Îʱ¼äδ¸üС£Õâ¾ä»°ÏÖÔÚÓ¦¸Ã¸Ä×÷¡¸Netscape ºÍ IE Á½´óä¯ÀÀÆ÷¶¼ÒÑÖ§Ô® Java¡¹¡£

    ²»¡¢²»¡¢²»¡£Java ºÍ CGI µÄ¸ÅÄîÍêÈ«²»Í¬¡£CGI ÊÇÔÚ server ¶ËÖ´ÐУ¬¶ø JavaÔòÊÇÔÚ client ¶ËÖ´ÐС£ÓÐЩ¶«Î÷£¨È綯»­£©¿É½