CGI´Â À¥ ¼¹ö¿Í ¿ÜºÎ ÇÁ·Î±×·¥°úÀÇ ¿¬µ¿À» À§ÇÑ Ç¥ÁØÀ̹ǷÎ, À¥ ¼¹ö¿¡¼ CGI ÇÁ·Î±×·¥À¸·Î, CGI ÇÁ·Î±×·¥¿¡¼ À¥ ¼¹ö·Î, ¼·Î Åë½ÅÇÏ´Â ¹æ¹ýÀÌ ¸¶·ÃµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. Åë½ÅÇÏ´Â ¹æ¹ýÀ̶ó ÇÏ´Â °ÍÀº À¥ ¼¹ö°¡ Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ ¹ÞÀº ÀÔ·Â µ¥ÀÌÅ͸¦ CGI ÇÁ·Î±×·¥¿¡ ¾î¶»°Ô Àü´ÞÇϸç, ±× ¿Ü¿¡ ¿©·¯°¡Áö Á¤º¸µéÀ» ¾î¶»°Ô Àü´ÞÇÏ´À³Ä ÇÏ´Â °Í°ú ¿ÜºÎ ÇÁ·Î±×·¥ÀÇ Ãâ·ÂÀ» ¾îµð·ÎºÎÅÍ ¹Þ´À³Ä´Â °ÍÀÌ´Ù. Áï, °£´ÜÇÏ°Ô ¸»Çϸé ÀÔ·Â ¹æ¹ý°ú Ãâ·Â ¹æ¹ýÀ̶ó ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½¿¡¼ °¢°¢¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ.
CGI·ÎÀÇ ÀÔ·Â
À¥ ¼¹ö´Â CGI·Î µ¥ÀÌÅ͸¦ Àü´ÞÇϱâ À§Çؼ ¼¼°¡Áö ¹æ¹ýÀ» »ç¿ëÇÑ´Ù. ù ¹ø° ¹æ¹ýÀº ȯ°æº¯¼ö¿¡ ÀÇÇÑ °ÍÀÌ°í µÎ ¹ø° ¹æ¹ýÀº Ç¥ÁØÀԷ¿¡ ÀÇÇÑ °ÍÀÌ´Ù. ¸¶Áö¸·À¸·Î ¸í·ÉÇàÀ» ÅëÇؼµµ ÀÔ·ÂÀ» Àü´ÞÇÒ ¼ö µµ ÀÖ´Ù.
CGI ȯ°æº¯¼ö
Form ű׿¡¼ Method¸¦ GETÀ¸·Î Çϰųª Isindex ű׸¦ »ç¿ëÇÏ´Â °æ¿ì, CGIÀÇ ÀÔ·ÂÀº ȯ°æº¯¼ö·ÎºÎÅÍ ¹Þ¾Æµé¿©Áø´Ù. À¥ ¼¹ö´Â CGI ÇÁ·Î±×·¥À» ¼öÇà½ÃÅ°±â Àü¿¡ ´ÙÀ½°ú °°Àº ȯ°æ º¯¼öµéÀ» ¼³Á¤ÇØ ³õÀº ÈÄ¿¡ CGI¸¦ È£ÃâÇÑ´Ù. ´ÙÀ½Àº CGI ÇÁ·Î±×·¥ ¾È¿¡¼ ÂüÁ¶ÇÒ ¼ö Àִ ȯ°æº¯¼öµéÀÇ ¸®½ºÆ®¿Í °¢°¢ÀÇ ÀǹÌÀÌ´Ù.
¼¹ö°ü·Ã ȯ°æº¯¼ö
¼¹ö¿¡ °ü·ÃµÈ ȯ°æº¯¼ö·Î¼ ÀüºÎ httpd.conf¿¡ ¼³Á¤µÈ °ªÀ» µû¸¥´Ù.
GATEWAY_INTERFACE(GET, POST)
À¥ ¼¹ö°¡ µû¸£°í ÀÖ´Â CGI Ç¥ÁØÀÇ ¹öÀü. Çü½Ä: CGI/°³Á¤¹øÈ£
¿¹) CGI/1.1
SERVER_SOFTWARE(GET, POST)
ÀÎÆ÷¸ÞÀÌ¼Ç ¼¹ö ÇÁ·Î±×·¥ÀÇ À̸§°ú ¹öÀüÀ» ´ã°í ÀÖ´Ù. Çü½Ä: À̸§/¹öÀü
¿¹) NCSA/1.5.1
SERVER_NAME(GET, POST)
¼¹öÀÇ È£½ºÆ® À̸§, ¶Ç´Â DNS alias, ¶Ç´Â IP ÁÖ¼Ò
¿¹) syscon.soongsil.ac.kr
SERVER_PROTOCOL(GET, POST)
ÀÌ ¿äûÀÌ ¾î¶² ÇÁ·ÎÅäÄÝÀ» µû¸£°í ÀÖ´Â °¡¸¦ ³ªÅ¸³½´Ù. Çü½Ä: ÇÁ·ÎÅäÄÝ/°³Á¤¹øÈ£
¿¹) HTTP/1.0
SERVER_PORT(GET, POST)
¿äûÀÌ º¸³»Áø Æ÷Æ® ¹øÈ£. ÀϹÝÀûÀ¸·Î Web Server´Â 80 Æ÷Æ®¸¦ »ç¿ëÇÑ´Ù.
¿¹) 80
SERVER_ADMIN(GET, POST)
¼¹ö°ü¸®ÀÚÀÇ e-mail address
¿¹) [email protected]
DOCUMENT_ROOT(GET, POST)
Web ServerÀÇ Document Root
¿¹) /home/htdocs
¿äû¿¡ °ü·ÃµÈ ȯ°æº¯¼ö
Request Message¸¦ ÅëÇØ Àü´ÞµÈ Á¤º¸°¡ ÀúÀåµÈ´Ù.
AUTH_TYPE(GET, POST)
¼¹ö¿¡¼ »ç¿ëÇÑ ÀÎÁõÀýÂ÷. ÀÎÁõÀýÂ÷°¡ ¾øÀ» °æ¿ì¿¡´Â NULLÀÌ µÈ´Ù.
¿¹) Basic
CONTENT_TYPE(POST)
¼¹ö¿¡ Àü¼ÛÁßÀÎ µ¥ÀÌÅÍÀÇ Çü½Ä. Method°¡ POSTÀÎ °æ¿ì¿¡¸¸ °ªÀ» °®´Â´Ù.
¿¹) text/html
CONTENT_LENGTH(POST)
POST ¿äû½Ã Ç¥ÁØÀԷ¿¡ Àü´ÞÇÑ ¹ÙÀÌÆ®ÀÇ ¼ö¸¦ ³ªÅ¸³½´Ù.
¿¹) 100
PATH_INFO(GET)
CGI ÇÁ·Î±×·¥¸í°ú Query»çÀÌ¿¡ ÁÖ¾îÁø Ãß°¡ÀûÀÎ »ó´ë °æ·Î Á¤º¸.
¿¹) /html/form
PATH_TRANSLATED(GET)
PATH_INFO¿Í °°Áö¸¸ °¡»ó °æ·Î°¡ ¼¹ö»óÀÇ ½ÇÁ¦ °æ·Î·Î Çؼ®µÈ´Ù´Â °ÍÀÌ ´Ù¸£´Ù.
¿¹) /home/html/form
QUERY_STRING(GET)
URIÀÇ ÀϺηΠÀü´ÞµÈ µ¥ÀÌÅÍ·Î URIÀÇ ? ´ÙÀ½¿¡ ÀÖ´Â ºÎºÐÀÌ´Ù.
¿¹) name1=586&name2=486
REQUEST_METHOD(GET, POST)
¿äû¿¡´ëÇÑ µ¥ÀÌÅÍ°¡ URI(GET) À̳ª STDIN(POST)·Î Àü¼ÛµÇ¾úÀ½À» ¸í½ÃÇÑ´Ù.
¿¹) POST
REMOTE_HOST(GET, POST)
¿äûÀ» ÇÑ È£½ºÆ®ÀÇ À̸§. À¥ ¼¹ö°¡ ÀÌ Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø¾úÀ» ¶§´Â REMOTE_ADDRÀÌ ¼³Á¤µÇ¸ç ÀÌ Á¤º¸´Â ¼³Á¤ÀÌ µÇÁö ¾Ê´Â´Ù.
¿¹)syscon.soongsil.ac.kr
REMOTE_ADDR(GET, POST)
¿äûÀ» ÇÑ È£½ºÆ®ÀÇ IP ÁÖ¼Ò¸¦ ³ªÅ¸³½´Ù.
¿¹) 210.206.89.230
REMOTE_USER(GET, POST)
ÀÎÁõÀýÂ÷¸¦ °ÅÃÆÀ» °æ¿ì »ç¿ëÀÚÀÇ ID¸¦ ³ªÅ¸³½´Ù.
¿¹) artech
SCRIPT_NAME(GET, POST)
½ÇÇàÁßÀÎ CGI ÇÁ·Î±×·¥ÀÇ À̸§.
¿¹) /cgi-api/env.plx
Ŭ¶óÀ̾ðÆ®¿Í °ü·ÃµÈ ȯ°æº¯¼ö(HTTP)
HTTP_ º¯¼ö´Â Ŭ¶óÀ̾ðÆ®¿¡ ÀÇÁ¸ÇÑ´Ù. µû¶ó¼ ¸ðµç ȯ°æº¯¼ö°¡ Ç×»ó Á¸ÀçÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
HTTP_ACCEPT(GET, POST)
Ŭ¶óÀ̾ðÆ®°¡ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â MIME ŸÀÔÀÇ ¸®½ºÆ®. °¢ Ç׸ñÀº ','¿¡ ÀÇÇؼ ±¸ºÐµÈ´Ù. Çü½Ä: type/subtype, type/subtype
¿¹) image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*
HTTP_ACCEPT_CHARSET(GET, POST)
»ç¿ëÁßÀÎ ¹®ÀÚ ¼ÂÆ®
¿¹) "iso-8859-1,*
HTTP_ACCEPT_LANGUAGE(GET, POST)
ÇöÀç ¼³Á¤µÈ ¾ð¾îÁýÇÕ
¿¹) ko, fr
HTTP_CONNECTION(GET, POST)
connectionÀÇ Å¸ÀÔ
¿¹) keep-alive
HTTP_COOKIE(GET, POST)
Web¿¡¼ »óÅÂÁ¤º¸¸¦ À¯ÁöÇϱâÀ§ÇØ »ç¿ëµÇ´Â cookie Á¤º¸
¿¹)name=111&pass=222
HTTP_HOST(GET, POST)
¼¹öÀÇ È£½º ¸í
¿¹) syscon.soongsil.ac.kr
HTTP_REFERER(GET, POST)
ÇöÀç ¹®¼¿¡ ¸µÅ©¸¦ Á¦°øÇÑ ¹®¼ÀÇ URL.
¿¹) http://qaos.com/index.htm
HTTP_USER_AGENT(GET, POST)
ºê¶ó¿ìÀúÀÇ Á¾·ù. Çü½Ä: software/version
¿¹) Mozilla/4.0b2 (Win95; I)
HTTP_PRAGMA(GET, POST)
¼¹ö¿Í Ŭ¶óÀ̾ðÆ® »çÀÌ¿¡ Á¸ÀçÇÏ´Â ³ëµåÀÇ µ¿ÀÛÀ» Á¤ÀÇ
¿¹) no-cache
Ç¥ÁØ ÀÔ·Â
ÀÔ·Â Æû¿¡¼ POST¸¦ »ç¿ëÇÏ¿´À» °æ¿ì¿¡´Â Ç¥ÁØÀÔ·ÂÀ¸·Î µ¥ÀÌÅÍ°¡ Àü´ÞµÈ´Ù. ÀÌ ¶§µµ µ¥ÀÌÅÍ°¡ ÀÎÄÚµùµÇ´Â ¹æ¹ýÀº QUERY_STRING¸¦ ¾µ ¶§¿Í ¸¶Âù°¡ÁöÀÌ´Ù. Ç¥ÁØÀÔ·ÂÀ¸·Î µ¥ÀÌÅÍ°¡ Àü´ÞµÉ ¶§¿¡´Â ¼¹ö°¡ µ¥ÀÌÅÍÀÇ ³¡¿¡ EOF ½Éº¼À» »ðÀÔÇÏÁö ¾ÊÀ» ¼öµµ Àֱ⠶§¹®¿¡ ȯ°æº¯¼ö CONTENT_LENGTH¸¦ Àоîµé¿©¼ ±× °ª ¸¸Å µ¥ÀÌÅ͸¦ Àоîµé¿©¾ß ÇÑ´Ù.
¸í·ÉÇà
ȯ°æº¯¼ö¿Í Ç¥ÁØÀԷ¿¡ ÀÇÇÑ ¹æ¹ý ¿Ü¿¡ <ISINDEX>¸¦ »ç¿ëÇÑ °æ¿ì, ¸í·ÉÇàÀÇ ¸Å°³º¯¼ö·Î ÀÎÀÚ¸¦ ³Ñ°Ü¹ÞÀ» ¼ö ÀÖ´Ù. ¸í·ÉÇàÀÌ »ç¿ëµÈ °ÍÀ» ¾Ë¾Æ³»±â À§Çؼ´Â Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍ Àü´ÞµÈ µ¥ÀÌÅÍ¿¡ ÀÎÄÚµùÀÌ µÇÁö ¾ÊÀº '='¸¦ ãÀ¸¸é µÈ´Ù.
À¥ ¼¹ö´Â ÀÎÄÚµùÀÌ µÇÁö ¾ÊÀº '='ÀÌ ÀÖÀ» °æ¿ì´Â GETÀ» ÅëÇÑ ÀÔ·ÂÀ¸·Î Çؼ®Çؼ ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÏÁö ¾Ê°í, ±×·¸Áö ¾Ê´Ù¸é <ISINDEX>¿¡ ÀÇÇÑ ÁúÀǶó°í ÆÇ´ÜÇؼ ¸í·ÉÇà ¿É¼ÇÀ» »ç¿ëÇÏ°Ô µÈ´Ù.
ÀÌ ¹æ¹ýÀº Ŭ¶óÀ̾ðÆ®°¡ <ISINDEX>¸¦ »ç¿ëÇÑ °æ¿ì¿¡ '='¸¦ ÀûÀýÇÏ°Ô ÀÎÄÚµùÇÏ´Â °æ¿ì¿¡¸¸ Àû¿ëµÉ ¼ö ÀÖ´Ù. ¸¸¾à Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÌ ÀÌ°ÍÀ» À߸øó¸®ÇÑ´Ù¸é Á¤È®ÇÏ°Ô ÆÇ´ÜÇÏÁö ¸øÇÒ ¼öµµ ÀÖ´Ù.
°£´ÜÇÑ ¿¹
finger.cgi ¼Ò½º
1: #!/usr/local/bin/perl
2:
3: print "Content-type: text/html\n\n";
4:
5: print "<HTML><HEAD><TITLE>ÇΰŠ°ÔÀÌÆ®¿þÀÌ</TITLE></HEAD><BODY>";
6: print "<H1>ÇΰŠ°ÔÀÌÆ®¿þÀÌ</H1>";
7:
8: if(!($#ARGV+1)) {
9: print "<ISINDEX prompt="user\@host¸¦ ÀÔ·ÂÇϼ¼¿ä: "><br>";
10: }else {
11: print "<PRE>";
12: print `/usr/bin/finger $ARGV[0]`;
13: print "</PRE>";
14: }
15:
16: print "</body></html>";
finger.cgiÀÇ ½ÇÇà°á°ú
finger.cgi
¼³¸í
À§ÀÇ ÇÁ·Î±×·¥Àº perlÀ» ÀÌ¿ëÇؼ finger °ÔÀÌÆ®¿þÀ̸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù. @ARGV´Â ¸í·ÉÇà ÀÎÀÚ¸¦ °¡Áö°í ÀÖÀ¸¸ç, $#ARGV+1Àº ¸í·ÉÇà ÀÎÀÚÀÇ °³¼ö(c¿¡¼ argc())¸¦ ³ªÅ¸³½´Ù.
¸í·ÉÇà¿¡ ÀÎÀÚ°¡ ¾ø´Â °æ¿ì, ´Ü¼øÈ÷ <ISINDEX> ű׸¦ Ãâ·ÂÇØ ÁÖ°í ÀÎÀÚ°¡ ÀÖ´Â °æ¿ì Áï, <ISINDEX> ÀÔ·Â Çʵ忡 µ¥ÀÌÅ͸¦ ÀÔ·ÂÇؼ CGI ÇÁ·Î±×·¥À» È£ÃâÇÑ °æ¿ì´Â finger ÇÁ·Î±×·¥À» ÀÔ·ÂÀÎÀÚ¿Í ÇÔ²² È£ÃâÇÑ ÈÄ ±× °á°ú¸¦ µ¹·Á ÁØ´Ù. finger ÇÁ·Î±×·¥À» È£ÃâÇÏ´Â ºÎºÐÀº /bin/finger $ARGV[0]À̸ç, ` `(¿ªµû¿ÈÇ¥)´Â ½ÇÇàÇÑ °á°ú¸¦ Ãâ·ÂÇ϶ó´Â ÀǹÌÀÌ´Ù.
finger ÇÁ·Î±×·¥Àº Ç¥ÁØÃâ·ÂÀ¸·Î °á°ú¸¦ Ãâ·ÂÇϱ⠶§¹®¿¡ CGIÀÇ Ãâ·Â ¹æ½Ä°ú µé¾î¸Â±â ¶§¹®¿¡ ±× °á°ú¸¦ Ưº°È÷ º¯È¯ÇØ ÁÙ ÇÊ¿ä°¡ ¾ø´Ù. ¸¸¾à html¹®¼·Î º¯È¯ÇØ¾ß ÇÑ´Ù¸é ±× °á°ú¸¦ ¹Þ¾ÆµéÀÎ ´ÙÀ½¿¡ ´Ù½Ã º¯È¯ÇÏ´Â °úÁ¤À» °ÅÃÄ¾ß ÇÒ °ÍÀÌ´Ù.
À¥ ¼¹ö°¡ ³»ºÎÀûÀÎ ÇÑ°è·Î ÀÎÇØ(¿¹¸¦ µé¾î exec()À̳ª /bin/sh ¸í·ÉÇàÀÇ Á¦¾à) Àüü ¹®ÀÚ¿À» º¸³¾ ¼ö°¡ ¾øÀ» °æ¿ì¿¡´Â ¸í·ÉÇàÀ» ÅëÇؼ´Â ¾Æ¹«·± Á¤º¸µµ Àü´ÞµÇÁö ¾Ê°í ´ë½Å QUERY_STRING¸¸ÀÌ »ç¿ëµÈ´Ù.
À§ ÇÁ·Î±×·¥Àº CGI ÇÁ·Î±×·¥À̹ǷΠ´ÙÀ½°ú °°ÀÌ permissionÀ» º¯°æÇØÁÖ°í Unix ¸í·ÉÇà¿¡¼ ½ÇÇà½ÃÄѺ» ÈÄ, À¥»ó¿¡¼ ½ÇÇà½ÃÄÑ¾ß ÇÑ´Ù.
Unix ¸í·ÉÇà¿¡¼ ½ÇÇà
% chmod 755 finger.cgi
% finger.cgi artech
Web¿¡¼ ½ÇÇà
http://ix.bit.co.kr/~artech/cgi-bin/finger.cgi