ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãMAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ãè€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã®ããããã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã haserl ã§ãã
ããã°ã©ã ïŒ
NAME
haserl - çµã¿èŸŒã¿ç°å¢çšã® CGI ã¹ã¯ãªãã ããã°ã©ã
SYNOPSIS
#!/usr/bin/haserl [--ã·ã§ã«=ãã¹ã¹ããã¯] [--ã¢ããããŒã-dir=ãã£ã«ã¹ããã¯] [--ã¢ããããŒã ãã³ãã© =ãã³ãã©]
[--ã¢ããããŒãå¶é=å¶é] [--ãã¹ãŠãåãå ¥ãã] [--åãå ¥ãã-ãªã] [ - éãã] [ - ãããã°]
[ ããã¹ã ] [ <% ã·ã§ã« ã¹ã¯ãªãã %> ] [ ããã¹ã ] ...
DESCRIPTION
Haserl ã¯ããPHPãã¹ã¿ã€ã«ã® CGI ããã°ã©ãã³ã°ãå¯èœã«ããå°ã㪠CGI ã©ãããŒã§ãããUNIX ã䜿çšããŸãã
ããã°ã©ãã³ã°èšèªãšã㊠bash ã®ãããªã·ã§ã«ãŸã㯠Lua ã䜿çšããŸãã ãšãŠãå°ããã®ã§ã䜿ããŸã
çµã¿èŸŒã¿ç°å¢ããŸã㯠PHP ã®ãããªãã®ã倧ããããå Žæã
XNUMX ã€ã®æ©èœãå°ã㪠CGI ãšã³ãžã³ã«çµåããŸãã
POST ããã³ GET ãªã¯ãšã¹ãã解æãããã©ãŒã èŠçŽ ã name=value ãã¢ãšããŠ
CGI ã¹ã¯ãªããã䜿çšããç°å¢ã ããã¯ã ããã¡ ã©ãããŒã
ã·ã§ã«ãéãããã¹ãŠã®ããã¹ããå°å·å¯èœãªã¹ããŒãã¡ã³ãã«å€æããŸãã ãã¹ãŠã®ããã¹ã
<% ... %> å ã®æ§é ã¯ãã®ãŸãŸã·ã§ã«ã«æž¡ãããŸãã ããã¯å€å°
æžãããã« PHP ã¹ã¯ãªããã
å¿ èŠã«å¿ããŠã€ã³ã¹ããŒã«ããŠããã®æš©éãã¹ã¯ãªããã®ææè ã«ããããããããšãã§ããŸãã
ã®ã»ãã¥ãªãã£æ©èœã®äžéšãæäŸãã å®è¡ or cgiã©ãããŒ.
OPTIONS æŠèŠ
ããã¯ãã³ãã³ã ã©ã€ã³ ãªãã·ã§ã³ã®æŠèŠã§ãã ãã芧ãã ãã OPTIONS ã»ã¯ã·ã§ã³ã®äžã«
å®å šãªèª¬æã®é·ããªãã·ã§ã³åã
-a --ãã¹ãŠãåãå ¥ãã
-n --accept-ãªã
-d --ãããã°
-sã--ã·ã§ã«
-S, --ãµã€ã¬ã³ã
-Uã--ã¢ããããŒããã£ã¬ã¯ããª
-u, --ã¢ããããŒãå¶é
-H, --ã¢ããããŒããã³ãã©
OPTIONS
--åãå ¥ãã-ãã¹ãŠ
ããã°ã©ã ã¯éåžžãREQUEST_METHOD ã POST ã§ããããã€
REQUEST_METHOD ã GET ã®å ŽåãURL ããŒã¿ã®ããŒã¿ã®ã¿ãåãå ¥ããŸãã ãã®ãªãã·ã§ã³
REQUEST_METHOD ã«é¢ä¿ãªããPOST ããŒã¿ãš URL ããŒã¿ã®äž¡æ¹ãåãå ¥ããããšãã§ããŸãã
ãã®ãªãã·ã§ã³ãèšå®ãããŠããå ŽåãREQUEST_METHOD ãåªå ãããŸã (ããšãã°ãã¡ãœããã
㯠POST ã§ãããFORM_variables 㯠COOKIE ããŒã¿ãGET ããŒã¿ãããã³ POST ããŒã¿ããååŸãããŸãã
ãã®æ³šæã ã¡ãœããã GET ã®å ŽåãFORM_variables 㯠COOKIE ããŒã¿ããååŸãããPOST
ããã©ã«ãã§ã¯ããã¹ãŠã®å ¥åã¡ãœãããåãå ¥ããããã§ã¯ãããŸããã
COOKIE ããŒã¿ãš REQUEST_METHODã
-- åãå ¥ãã - ãªã
æå®ãããå Žåãhaserl ã¯åŠçåã«æšæºå ¥åã http ã³ã³ãã³ããšããŠè§£æããŸããã
ã¹ã¯ãªããã ããã¯ãå¥ã® haserl ã¹ã¯ãªãããã haserl ã¹ã¯ãªãããåŒã³åºãå Žåã«äŸ¿å©ã§ãã
- ãããã°
ã¹ã¯ãªãããå®è¡ãã代ããã«ãå®è¡ãããã¹ã¯ãªãããåºåããŸãã ããã
ç°å¢å€æ°ãREQUEST_METHODããèšå®ãããŠããå ŽåãããŒã¿ã¯
ãã¬ãŒã³/ããã¹ã ã³ã³ãã³ã ã¿ã€ãã ãã以å€ã®å Žåãã·ã§ã« ã¹ã¯ãªããã¯éèªçã«åºåãããŸãã
--shell =ãã¹ã¹ããã¯
䜿çšãã代æ¿ã® bash ã®ãããªã·ã§ã«ãæå®ããŸãã ããã©ã«ã㯠"/bin/sh"
ã·ã§ã« ãã©ã¡ãŒã¿ãå«ããã«ã¯ã --shell= ã䜿çšããªãã§ãã ãã/bin/sh ãã©ãŒãããã 代ããã«ã
--shell ã®ããã«ãã=ãã®ãªã代æ¿åœ¢åŒ/bin/bash --norcãã
ãªãã·ã§ã³æååãåŒçšç¬Šã§å²ã¿ãç¹æ®æåãä¿è·ããŸãã
Lua ã©ã€ãã©ãªã§ã³ã³ãã€ã«ãããŠããå Žåãæååãluaãã䜿çšããŠçµ±åããã
Lua vm. ãã®æååã¯å€§æåãšå°æåãåºå¥ãããŸãã äŸïŒ --shell =ã ãŒã³
代æ¿æ段ã¯ãluacãã§ãã ããã«ãããhaserl ããã³ lua ããŒãµãŒãç¡å¹ã«ãªãã
ã¹ã¯ãªããã¯ããªã³ã³ãã€ã«ããã lua ãã£ã³ã¯ã§ãããšæ³å®ãããŸãã èŠã ã«ã¢ã㯠詳现ã«ã€ããŠã¯ä»¥äžãã芧ãã ãã
æ å ±ã衚瀺ããŸãã
- éãã
Haserl ã¯éåžžããšã©ãŒç¶æ ã«é¢ããæ å ±ã¡ãã»ãŒãžãåºåããŸãã ãã
haserl ã®äœ¿çšãéç¥ãããªãããã«ããšã©ãŒ ã¡ãã»ãŒãžãæå¶ããŸãã
--ã¢ããããŒããã£ã¬ã¯ããª=ãã£ã«ã¹ããã¯
ããã©ã«ãã¯ã/ tmpã«"ãã¢ããããŒãããããã¹ãŠã®ãã¡ã€ã«ã¯ããã®äžã«äžæçãªãã¡ã€ã«åã§äœæãããŸã
ãã£ã¬ã¯ããªã«ãžã§ããéå§ããŸãã HASERL_xxx_path äžæãã¡ã€ã«ã®ååãå«ãŸããŠããŸãã FORM_xxx_name
ã¯ã©ã€ã¢ã³ãã«ãã£ãŠæå®ããããã¡ã€ã«ã®å ã®ååãå«ãŸããŸãã
--ã¢ããããŒããã³ãã©ãŒ=ãã¹ã¹ããã¯
æå®ãããšããã¡ã€ã«ã®ã¢ããããŒãã¯ããã®ãã³ãã©ãŒã«æžã蟌ãŸããã®ã§ã¯ãªãããã®ãã³ãã©ãŒã«ãã£ãŠåŠçãããŸãã
äžæãã¡ã€ã«ã ãã« ãã¹ä»æ§ãæå®ããå¿ èŠããããŸã (PATH ã¯æ€çŽ¢ãããŸãã)ã
ã¢ããããŒã ãã³ãã©ã«ã¯ã次㮠XNUMX ã€ã®ã³ãã³ã ã©ã€ã³ ãã©ã¡ãŒã¿ãäžããããŸãã
ã¢ããããŒããã¡ã€ã«ãéä¿¡ãããŸãã ããã«ããã³ãã©ãŒã¯ 3 ãåãåãå ŽåããããŸãã
ç°å¢å€æ°ïŒ ã³ã³ãã³ãã¿ã€ã, ãã¡ã€ã«å, NAME. ãããã¯MIMEãåæ ããŠããŸã
ã³ã³ãã³ãã® content-disposition ããããŒã Haserl ã¯ããããã®ãã³ãã©ãŒããã©ãŒã¯ããŸãã
ãã¡ã€ã«ãã¢ããããŒããããã¢ããããŒã ãã¡ã€ã«ã®å 容ãæå®ããã FIFO ã«éä¿¡ãããŸãã
ãã®åŸãHaserl ã¯ãã³ãã©ãŒãçµäºãããŸã§ãããã¯ããŸãã ãã®æ¹æ³ã¯å°é家åãã§ã
ã®ã¿ã
--ã¢ããããŒãå¶é=å¶é
MIME ã§ãšã³ã³ãŒãããããã¡ã€ã«ãèš±å¯ãã å¶é KB ã¢ããããŒãããã ããã©ã«ã㯠0KB ïŒno
ã¢ããããŒãã¯èš±å¯ãããŠããŸã)ã MIME ãšã³ã³ãŒãã«ãããããŒã¿ã®ãµã€ãºã 33% å¢å ããããšã«æ³šæããŠãã ããã
æŠèŠ OF OPERATION
äžè¬ã«ãWeb ãµãŒããŒã¯ããã€ãã®ç°å¢å€æ°ãèšå®ããŠããã ãã©ãŒã¯ or
CGI ã¹ã¯ãªãããå®è¡ããå¥ã®æ¹æ³ã ã¹ã¯ãªããã ãã¶ãŒã« éèš³ã
次ã®ããšãèµ·ãããŸã:
If ãã¶ãŒã« suid root ãã€ã³ã¹ããŒã«ãããuid/gid ãã¹ã¯ãªããã®ææè ã«èšå®ãããŸãã
ç°å¢ãã¹ãã£ã³ãããŸã HTTP_COOKIEããŠã§ãã§èšå®ãããå¯èœæ§ããããŸã
ãµãŒãã ååšããå Žåã解æãããã³ã³ãã³ãã¯ããŒã«ã«ç°å¢ã«é 眮ãããŸãã
ç°å¢ãã¹ãã£ã³ãããŸã REQUEST_METHODããã㯠Web ãµãŒããŒã«ãã£ãŠèšå®ãããŸããã
request ã¡ãœããã«åºã¥ããŠãæšæºå ¥åãèªã¿åãããŠè§£æãããŸãã 解æããã
ã³ã³ãã³ãã¯ããŒã«ã«ç°å¢ã«é 眮ãããŸãã
ã¹ã¯ãªããã¯ããŒã¯ã³åããã解æãããŸã ãã¶ãŒã« çã®ããã¹ãããã®ã³ãŒã ãããã¯ã çã®ããã¹ãã¯
ãechoãã¹ããŒãã¡ã³ãã«å€æããããã¹ãŠã®ããŒã¯ã³ããµãã·ã§ã«ã«éä¿¡ãããŸãã
ãã¶ãŒã« ãã©ãŒã¯ãšãµãã·ã§ã« (é垞㯠/bin/sh) ãéå§ãããŸãã
ãã¹ãŠã®ããŒã¯ã³ã¯ããµãã·ã§ã«ã® STDIN ã«éä¿¡ãããæ«å°Ÿã« çµäºãã
ãµãã·ã§ã«ãçµäºãããšã ãã¶ãŒã« ã€ã³ã¿ããªã¿ã¯æçµçãªã¯ãªãŒã³ã¢ãããå®è¡ãã
ãã®åŸçµäºããŸãã
ã¯ã©ã€ã¢ã³ã åŽ å ¥å
ã ãã¶ãŒã« ã€ã³ã¿ãŒããªã¿ãŒã¯ãHTTP_COOKIE ç°å¢å€æ°ãä»ããŠéä¿¡ãããããŒã¿ããã³ãŒãããŸãã
ã¯ã©ã€ã¢ã³ããã GET ãŸã㯠POST ã¡ãœãããåŒã³åºããããããç°å¢å€æ°ãšããŠä¿åããŸãã
hasurl ã§ã¢ã¯ã»ã¹ã§ããŸãã å€æ°ã®ååã¯ããœãŒã¹ã§æå®ãããååã«åŸããŸãã
ãã ããæ¥é èŸ ( 圢_) ãå é ã«è¿œå ãããŸãã ããšãã°ãã¯ã©ã€ã¢ã³ãããfoo=barããéä¿¡ãããšã
ç°å¢å€æ°ã¯ FORM_foo=ããŒ.
HTTP_COOKIE ã¡ãœããã®å Žåãå€æ°ã¯ãã¬ãã£ãã¯ã¹ ( COOKIE_ïŒè¿œå ã
ããšãã°ãHTTP_COOKIE ã«ãfoo=barããå«ãŸããŠããå Žåãç°å¢å€æ°ã¯
COOKIE_foo=ããŒ.
GET ã¡ãœããã®å Žåããã©ãŒã %xx ã§éä¿¡ãããããŒã¿ã¯ãæå®ãããæåã«å€æãããŸãã
è¡šçŸããå€æ°ãæ¥é èŸ ( GET_ïŒ è¿œå ããã ããšãã°ã
QUERY_STRING ã«ã¯ãfoo=barããå«ãŸããç°å¢å€æ°ã¯ GET_foo=ããŒ.
POST ã¡ãœããã®å Žåãå€æ°ã¯ãã¬ãã£ãã¯ã¹ ( POST_ïŒ è¿œå ããã çºã«
ããšãã°ããã¹ã ã¹ããªãŒã ã«ãfoo=barããå«ãŸããŠããå Žåãç°å¢å€æ°ã¯ POST_foo=ããŒ.
ãŸããPOST ã¡ãœããã®å ŽåãããŒã¿ã次ã䜿çšããŠéä¿¡ãããå Žå multipart / form-data ãšã³ã³ãŒãã£ã³ã°ã
ããŒã¿ã¯èªåçã«ãã³ãŒããããŸãã ããã¯éåžžããã¡ã€ã«ã Web ããã¢ããããŒãããããšãã«äœ¿çšãããŸãã
䜿çšããŠããã¯ã©ã€ã¢ã³ã.
泚æ ãã¡ã€ã«ã Web ãµãŒããŒã«ã¢ããããŒãããããšããã¡ã€ã«ã¯ ã¢ããããŒããã£ã¬ã¯ããª
ãã£ã¬ã¯ããªã«ãããŸãã FORM_å€æ°å= ã¢ããããŒãããããã¡ã€ã«ã®ååãå«ãŸããŠããŸãïŒ
ã客æ§æå®ãïŒ HASERL_variable_path= ã«ãã¡ã€ã«ã®ååãå«ãŸããŠããŸã
ã¢ããããŒããã£ã¬ã¯ã㪠ã¢ããããŒããããã³ã³ãã³ããä¿æããŸãã æªæã®ããã¯ã©ã€ã¢ã³ããé²æ¢ããã«ã¯
ãã£ã±ãã«ãªã ã¢ããããŒããã£ã¬ã¯ã㪠Web ãµãŒããŒã§ã¯ããã¡ã€ã«ã®ã¢ããããŒãã¯ã
--ã¢ããããŒãå¶é ãªãã·ã§ã³ã¯ãã¢ããããŒãã§ãããã¡ã€ã«ã®å€§ãããæå®ããããã«äœ¿çšãããŸãã ãã»ã«
ã¹ã¯ãªãããçµäºãããšãäžæãã¡ã€ã«ãèªåçã«åé€ãããŸãã ç¶æããããã«
ãã¡ã€ã«ã移åããããã¹ã¯ãªããå ã®ã©ããã«ååãå€æŽããŸãã
ãã¡ã€ã«åã¯æ¬¡ã®å Žæã«ä¿åãããããšã«æ³šæããŠãã ããã ããŒã»ã«_å€æ°ãã¹ ããã¯ãFORM_ã
GET_ ããã³ POST_ å€æ°ã¯ã¯ã©ã€ã¢ã³ãã«ãã£ãŠå€æŽå¯èœã§ãããæªæã®ããã¯ã©ã€ã¢ã³ãã¯
ååã§XNUMXçªç®ã®å€æ°ãèšå®ããŸã å€æ°ãã¹=/etc/passwd. 以åã®ããŒãžã§ã³
ãã¹ã¹ããã¯ãä¿åããŸããã§ãã ãã¶ãŒã« åå空é ã« ç¶æãã åŸãåã
äºææ§ã ã å of ã äžæç file is ãŸã ä¿åãã in FORM_å€æ°= &
POST_å€æ°=ã ãã® is èŠãªã å®å šã§ãªã & ãã¹ã be äžå€ã
ã¯ã©ã€ã¢ã³ããããŒã¿ãéä¿¡ããå Žå äž¡èšèªã§ POST ããã³ GET ã¡ãœããã«ãã£ãŠã次㫠ãã¶ãŒã« ã®ã¿ã解æããŸã
ã«å¯Ÿå¿ããããŒã¿ REQUEST_METHOD Web ãµãŒããŒã«ãã£ãŠèšå®ãããå€æ°ã
ãã¹ãŠãåãå ¥ãã ãªãã·ã§ã³ãèšå®ãããŸããã ããšãã°ããã©ãŒã 㯠POST ã¡ãœãããä»ããŠåŒã³åºãããŸããã
some.cgi?foo=bar&otherdata=something ã® URI ã«ã¯ POST ããŒã¿ã解æããã foo
& ãã®ä»ã®ããŒã¿ å€æ°ã¯ç¡èŠãããŸãã
Web ãµãŒããŒã HTTP_COOKIE ç°å¢å€æ°ãCookie ããŒã¿ã解æãããŸãã
Cookie ããŒã¿ã解æãããŸã GET ãŸã㯠POST ããŒã¿ã® XNUMX ã€ã®å€æ°ã®å Žåã
åãååã䜿çšãããšãGET ãŸã㯠POST ããŒã¿ã«ãã£ãŠ Cookie æ å ±ãäžæžããããŸãã
åãå€æ°ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãç°ãªããœãŒã¹ããéä¿¡ããããšã
FORM_variable ã¯ãå€æ°ãåŠçãããé åºã«åŸã£ãŠèšå®ãããŸãã
HTTP_COOKIE ã¯åžžã«æåã«åŠçããããã®åŸã« REQUEST_METHOD ãç¶ããŸãã ãã¹ãŠãåãå ¥ããå Žå
ãªãã·ã§ã³ãèšå®ãããŠããå ŽåãHTTP_COOKIE ãæåã«åŠçããã次ã«ã¡ãœãã not ãç¶ããŸãã
REQUEST_METHOD ã«ãã£ãŠæå®ããããã®åŸã« REQUEST_METHOD ãç¶ããŸãã ã®æåŸã®ã€ã³ã¹ã¿ã³ã¹
variable 㯠FORM_variable ã®èšå®ã«äœ¿çšãããŸãã å€æ°ãå¥ã ã§ããããšã«æ³šæããŠãã ãã
COOKIE_variableãGET_variableãããã³ POST_variable ãšããŠäœæããŸãã ããã«ããã
åãœãŒã¹ããã®éè€ããååã
åãå€æ°ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãåããœãŒã¹ããéä¿¡ãããå ŽåãæåŸã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ãéä¿¡ãããŸãã
XNUMXã€ãä¿åãããŸãã ãã¹ãŠã®ã³ããŒãä¿æããã«ã¯ (ããšãã°ãè€æ°éžæã®å Žå)ãæåŸã«ã[]ããè¿œå ããŸã
å€æ°åã®ã æ¹è¡ã§åºåããããã¹ãŠã®çµæãè¿ãããŸãã äŸãã°ã
host=Enoch&host=Esther&host=Joshua 㯠"FORM_host=Joshua" ã«ãªããŸãã
host[]=ãšãã¯&ãã¹ã[]ãšã¹ã¿ãŒ&ãã¹ã[]=ãšã·ã¥ã¢ã®çµæã¯ãFORM_host=ãšãã¯\nãšã¹ã¿ãŒ\nãšã·ã¥ã¢ã
èšèª
次ã®èšèªæ§é ã¯ãã«ãã£ãŠèªèãããŸãã ãã¶ãŒã«.
RUN
<% [ã·ã§ã«ã¹ã¯ãªãã] %>
<% %> ã¿ã°ã§å²ãŸãããã®ã¯ãã¹ãŠãå®è¡ã®ããã«ãµãã·ã§ã«ã«éä¿¡ãããŸãã ããã¹ã
ãã®ãŸãŸéä¿¡ãããŸãã
ã€ã³ã¯ã«ãŒã
<%in pathspec %>
ãã®ã¹ã¯ãªããã«å¥ã®ãã¡ã€ã«ãéèªçã«å«ããŸãã ãã®ãã¡ã€ã«ã¯ãã¹ã¯ãªããã®å®è¡æã«ã€ã³ã¯ã«ãŒããããŸãã
æåã«è§£æãããŸãã
ãšããŒã«
<%=åŒ%>
ã·ã§ã«åŒãåºåããŸãã ãecho exprãã®ã·ã³ã¿ãã¯ã¹ ã·ã¥ã¬ãŒã
ã³ã¡ã³ã
<%# ã³ã¡ã³ã %>
ã³ã¡ã³ããããã¯ã ã³ã¡ã³ã ãããã¯å ã®å 容ã¯è§£æãããŸããã ã³ã¡ã³ãã¯ãã¹ãå¯èœ
ä»ã® haserl èŠçŽ ãå«ããããšãã§ããŸãã
äŸ
èŠå
以äžã®äŸã¯ã䜿çšæ¹æ³ã瀺ãããã«ç°¡ç¥åãããŠããŸã ãã¶ãŒã«ã ããªãã¯
䜿çšããåã«ãåºæ¬ç㪠Web ã¹ã¯ãªãã ã»ãã¥ãªãã£ã«ç²ŸéããŠãã ãã¶ãŒã« (ãŸãã¯ä»»æã®ã¹ã¯ãªãã
èšèª) æ¬çªç°å¢ã§ã
ç°¡åãªæ¡åŒµã§ Command
#!/usr/local/bin/haserl
ã³ã³ãã³ã ã¿ã€ã: ããã¹ã/ãã¬ãŒã³
<%# ããã¯ãµã³ãã«ã® "env" ã¹ã¯ãªããã§ã %>
<%ç°å¢%>
ã®çµæãå°å·ããŸãã env ã³ãã³ãã MIME ã¿ã€ãã®ãtext/plainãããã¥ã¡ã³ããšããŠéä¿¡ããŸãã ããã¯
ã ãã¶ãŒã« å ±éã®ããŒãžã§ã³ printenv cgiã
ã«ãŒã ã ãã€ããã㯠åºå
#!/usr/local/bin/haserl
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/html
èµ€ãéãé»ãã·ã¢ã³ã® a ã®å Žå㯠<%ã ãã %>
"><% echo -n "$a" %>
<% å®äº %>
MIME ã¿ã€ãã®ãtext/htmlãããã¥ã¡ã³ããã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã
èæ¯è²ã§ã©ãã«ä»ããããèŠçŽ ã
ã ã·ã§ã«ïŒShellïŒ å®çŸ©æžã¿ã® æ©èœããŸãã
#!/usr/local/bin/haserl
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/html
<% # ãŠãŒã¶ãŒé¢æ°ãå®çŸ©
ããŒãã«èŠçŽ () {
ãšã³ãŒ " $1 "
}
%>
èµ€ãéãé»ãã·ã¢ã³ã® a ã®å Žå㯠<%ã ãã %>
<% ããŒãã«èŠçŽ $a %>
<% å®äº %>
äžèšãšåãã§ãããåã蟌㿠html ã®ä»£ããã«ã·ã§ã«é¢æ°ã䜿çšããŸãã
èªå·± åç § CGI ã a ãã©ãŒã
#!/usr/local/bin/haserl
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/html
ãµã³ãã«ãã©ãŒã
" method="GET">
<% # FORM_textfield ã®åºæ¬çãªæ€èšŒãè¡ããŸã
# äžè¬ç㪠Web æ»æãé²ãã«ã¯
FORM_textfield=$( echo "$FORM_textfield" | sed "s/[^A-Za-z0-9 ]//g" )
%>
<å ¥åã¿ã€ã=ããã¹ãå=ããã¹ããã£ãŒã«ã
Value="<% echo -n "$FORM_textfield" | tr az AZ %>" cols=20>
ãã©ãŒã ãå°å·ããŸãã ã¯ã©ã€ã¢ã³ãããã©ãŒã ã«ããã¹ããå ¥åãããšãCGI ããªããŒããããŸã (å®çŸ©æžã¿)ã
by $SCRIPT_NAMEïŒãWeb æ»æãé²ãããã«ããã¹ããã£ãŒã«ãããµãã¿ã€ãºããããšã
ãŠãŒã¶ãŒãå ¥åããããã¹ããå«ããã©ãŒã ãå衚瀺ãããŸãã ããã¹ãã¯å€§æåã§ãã
ã¢ããããŒã a File
#!/usr/local/bin/haserl --upload-limit=4096 --upload-dir=/ tmpã«
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/html
" method=POST enctype="multipart/form-data" >
<% if test -n "$HASERL_uploadfile_path"; 次㫠%>
<% echo -n $FORM_uploadfile_name %>ãšããååã®ãã¡ã€ã«ãã¢ããããŒãããŸãããã
. ãšããŠãµãŒããŒã«äžæçã«ä¿åãããŸãã ã®
ãã¡ã€ã«ã¯ <% cat $HASERL_uploadfile_path | wc -c %> ãã€ãã®é·ãã
<% rm -f $HASERL_uploadfile_path %> å¿é ããªãã§ãã ããããã¡ã€ã«ã¯åé€ãããã°ããã§ã
ãŠã§ããµãŒããŒããã
<% ä» %>
ãŸã ãã¡ã€ã«ãã¢ããããŒãããŠããŸããã
<% fi %>
ãã¡ã€ã«ã®ã¢ããããŒããå¯èœã«ãããã©ãŒã ã衚瀺ããŸãã ããã¯ã
--ã¢ããããŒãå¶é ãããŠãã©ãŒã ãèšå®ããããšã«ãã£ãŠ enctype ããž ãã«ãããŒã/ãã©ãŒã ããŒã¿ã Status
ã¯ã©ã€ã¢ã³ãããã¡ã€ã«ãéä¿¡ãããšããã¡ã€ã«ã«é¢ããæ å ±ãåºåããã次ã«
åé€ãããŸããã ãã以å€ã®å Žåãã¯ã©ã€ã¢ã³ãããã¡ã€ã«ãã¢ããããŒãããŠããªãããšããã©ãŒã ã«ç€ºãããŸãã
RFC-2616 é©å
#!/usr/local/bin/haserl
<% echo -en "content-type: text/html\r\n\r\n" %>
...
HTTP ä»æ§ã«å®å šã«æºæ ããã«ã¯ãããããŒã次ã®ããã«çµäºããå¿ èŠããããŸãã
éåžžã® unix LF è¡çµç«¯ã®ã¿ã§ã¯ãªããCR+LFã äžèšã®æ§æã¯
RFC 2616 æºæ ã®ããããŒãçæããããã«äœ¿çšãããŸãã
ENVIRONMENT
Web ãµãŒããŒããç¶æ¿ãããç°å¢å€æ°ã«å ããŠã次ã®
ç°å¢å€æ°ã¯åžžã«èµ·åæã«å®çŸ©ãããŸãã
ãã¶ãŒããŒ
ãã¶ãŒã« version - æ å ±ã¿ã°ã
ã»ãã·ã§ã³ID
CGI ã®åç¶æéäžã«åºæã® XNUMX é²æ°ã®ã¿ã° (
cgi ãéå§ããŸãã å¥ã® POST ãŸã㯠GET ã¯ãšãªãçæããããŸã§å€æŽãããŸããã)
HASERL_ACCEPT_ALL
Status --åãå ¥ãã-ãã¹ãŠ æãç«ãŠããã -1ãããã§ãªããã° 0.
HASERL_SHELL
ãµãã·ã§ã«ã³ãã³ããå®è¡ããããã«éå§ãããã·ã§ã« haserl ã®ååã
HASERL_UPLOAD_DIR
ã¢ããããŒãããããã¡ã€ã«ãæ ŒçŽããããã« haserl ã䜿çšãããã£ã¬ã¯ããªã
HASERL_UPLOAD_LIMIT
ã¯ã©ã€ã¢ã³ããããµãŒããŒã«éä¿¡ã§ãã KB æ°ã
ãããã®å€æ°ã¯ãã¹ã¯ãªããå ã§å€æŽãŸãã¯äžæžãã§ããŸãã
ãHASERL_ãã§å§ãŸããã®ã¯æ å ±æäŸã®ã¿ãç®çãšããŠãããå®è¡äžã®ã¹ã¯ãªããã«ã¯åœ±é¿ããŸããã
å®å š ååç¹åŸŽ
ã·ã§ã«ã䜿çšã㊠CGI ã¹ã¯ãªãããããã°ã©ã ããããšã®å±éºæ§ã«ã€ããŠã¯ãå€ãã®æç®ããããŸãã
ãã¶ãŒã« å«ãŸããŠããŸã äžéš ãã®ãªã¹ã¯ã軜æžããããã®ä¿è·ã
ç°å¢ Variables
ç°å¢å€æ°ãèšå®ããã³ãŒãã¯ããµãã®ç¯å²å€ã§ãã
ã·ã§ã«ã æåã§è§£æããŸããïŒ ããã³ & ã§ãããããã¯ã©ã€ã¢ã³ããå®è¡ããã®ã¯å°é£ã§ãã
ã泚å°ãæ»æã äŸãšããŠã foo.cgi?a=test;ç« /etc/passwd ã«ãªãå¯èœæ§ããããŸã
å€ãå²ãåœãŠãããå€æ° test ãããŠå®è¡çµæ cat
/etc/passwd ã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸãã ãã»ã« å€æ°ã«å®å šãª
å€ïŒ ãã¹ã;ç« /etc/passwd
ãã®ãå±éºãªãå€æ°ãã·ã§ã« ã¹ã¯ãªããã§äœ¿çšããã«ã¯ã
åŒçš; ãã ãããã¹ãŠã®å ¥åãã£ãŒã«ãã§æ€èšŒãè¡ãå¿ èŠããããŸãã
ç¹æš© èœã¡ã
suid ã¹ã¯ãªãããšããŠã€ã³ã¹ããŒã«ãããŠããå Žåã ãã¶ãŒã« ãã® uid/gid ãææè ã®ãã®ã«èšå®ããŸã
ã¹ã¯ãªããã ããã¯ãããŸããŸãª CGI ã¹ã¯ãªããã®ã»ãããæã€ããã«äœ¿çšã§ããŸãã
ç¹æš©ã ãã ãã¶ãŒã« ãã€ããªã suid ã§ã€ã³ã¹ããŒã«ãããŠããªãå ŽåãCGI ã¹ã¯ãªããã¯
Web ãµãŒããŒã® uid/gid ã§å®è¡ããŸãã
éæ¿èª command ã©ã€ã³ ãã©ã¡ãŒã¿ äžãããã on ã URL
URL ã«ãšã³ã³ãŒããããŠããªãã=ããå«ãŸããŠããªãå ŽåãCGI ä»æ§ã«ãªãã·ã§ã³ãèšèŒãããŠããŸãã
ããã°ã©ã ãžã®ã³ãã³ãã©ã€ã³ ãã©ã¡ãŒã¿ãšããŠäœ¿çšãããŸãã ããšãã°ã
CGIä»æ§ãžïŒ http://192.168.0.1/test.cgi?--ã¢ããããŒãå¶é%3d2000&foo%3dbar
ãFoo=barãã®èšå®ã«å ããŠãupload-limit ã 2000KB ã«èšå®ããå¿ èŠããããŸãã å®ãããš
ç¬èªã®ã¢ããããŒããæå¹ã«ããã¯ã©ã€ã¢ã³ãã«å¯ŸããŠã ãã¶ãŒã« ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãæåŠããŸã
argv[2] ãè¶ ããŠããŸãã #! ãšããŠåŒã³åºãããå Žåã¹ã¯ãªãããã€ã³ã¿ããªã¿ã¯ argv[0]ããã¹ãŠ
#! ã«ãªã¹ããããŠããã³ãã³ã ã©ã€ã³ ãªãã·ã§ã³è¡ã¯ argv[1] ã«çµåããã
ã¹ã¯ãªããå㯠argv[2] ã§ãã
LUA
lua ãµããŒãä»ãã§ã³ã³ãã€ã«ããå Žåã --shell=lua 代ããã«ã¹ã¯ãªããèšèªãšã㊠lua ãæå¹ã«ããŸã
bash ã·ã§ã«ã®ã ç°å¢å€æ° (SCRIPT_NAMEãSERVER_NAME ãªã©) ã¯æ¬¡ã®å Žæã«é 眮ãããŸãã
ENV ããŒãã«ã«æ ŒçŽããããã©ãŒã å€æ°ã¯ FORM ããŒãã«ã«é 眮ãããŸãã ããšãã°ã
äžèšã®èªå·±åç §ãã©ãŒã ã¯ã次ã®ããã«èšè¿°ã§ããŸãã
#!/usr/local/bin/haserl --shell=lua
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/html
ãµã³ãã«ãã©ãŒã
" ã¡ãœãã="GET">
<% # FORM_textfield ã®åºæ¬çãªæ€èšŒãè¡ããŸã
# äžè¬ç㪠Web æ»æãé²ãã«ã¯
FORM.textfield=string.gsub(FORM.textfield, "[^%a%d]", "")
%>
<å ¥åã¿ã€ã=ããã¹ãå=ããã¹ããã£ãŒã«ã
Value="<% io.write (string.upper(FORM.textfield)) %>" cols=20>
<%= æŒç®åã¯æ§æç³è¡£ã§ã io.write (tostring( ... )) ãããã£ãŠãããšãã°ã
äžèšã® Value= è¡ã¯æ¬¡ã®ããã«èšè¿°ã§ããŸãã å€="<%= string.upper(FORM.ããã¹ããã£ãŒã«ã) %>" å=20>
haserl lua ã¹ã¯ãªããã¯é¢æ°ã䜿çšã§ããŸã hasurl.loadfile(ãã¡ã€ã«å) ã¿ãŒã²ãããåŠçãã
ã¹ã¯ãªããã¯ãhaserl (lua) ã¹ã¯ãªãããšããŠäœæãããŸãã é¢æ°ã¯ãé¢æ°ãã®ã¿ã€ããè¿ããŸãã
ããšãã°ã
bar.lsp
<% io.write ("Hello World" ) %>
ããªãã®ã¡ãã»ãŒãžã¯ <%= gvar %> ã§ã
-- ã€ã³ã¯ã«ãŒããã¡ã€ã«ã®çµãã --
foo.ããµãŒã«
#!/usr/local/bin/haserl --shell=lua
<% m = haserl.loadfile("bar.lsp")
gvar = "m() ãšããŠå®è¡"
mïŒïŒ
gvar = "ã¯ã³ã¹ãããã§èªã¿èŸŒã¿ãšå®è¡"
haserl.loadfile("bar.lsp")()
%>
Running: foo çæãããŸã:
ããã«ã¡ã¯äžç
ããªãã®ã¡ãã»ãŒãžã¯ Run as m() ã§ã
-- ã€ã³ã¯ã«ãŒããã¡ã€ã«ã®çµãã --
ããã«ã¡ã¯äžç
ããªãã®ã¡ãã»ãŒãžã¯ èªã¿èŸŒã¿ãšå®è¡ãã¯ã³ã¹ãããã§
-- ã€ã³ã¯ã«ãŒããã¡ã€ã«ã®çµãã --
ãã®é¢æ°ã«ããããã¹ãããã haserl ãµãŒã㌠ããŒãž (ããŒãž ã¹ãããã) ãæã€ããšãå¯èœã«ãªããŸãã
haserl ããŒã¯ãã€ã¶ãŒã«ãã£ãŠåŠçãããŸãã
ã«ã¢ãã¯
ã ã«ã¢ã㯠ãã·ã§ã«ãã¯ã³ã³ãã€ã«æžã¿ã® lua ãã£ã³ã¯ãªã®ã§ãã¹ã¯ãªããã®ã€ã³ã¿ã©ã¯ãã£ããªç·šéãšãã¹ããè¡ããŸã
äžå¯èœã§ãã ãã ããhaserl 㯠luac ãµããŒãã®ã¿ã§ã³ã³ãã€ã«ã§ããããã«ãã
å°ãªãã¡ã¢ãªç°å¢ã§ãlua察å¿ã äžèšã®ãã¹ãŠã® haserl lua æ©èœã¯ã
ãŸã å©çšå¯èœã§ãã (luac ã haserl ã«çµã¿èŸŒãŸããŠããå¯äžã®ã·ã§ã«ã§ããå Žåãhaserl.loadfile ã¯
haserl ããŒãµãŒãã³ã³ãã€ã«ãããŠããªããããç¡å¹ã«ãªã£ãŠããŸãã)
以äžã¯ãluac cgi ã¹ã¯ãªããã«å€æãããåçŽãªã¹ã¯ãªããã®äŸã§ãã
ãã¡ã€ã« test.lua ãäžããããå Žå:
å°å· ("Content-Type: text/plain0)
print ("ãã®å®è¡ã® UUID ã¯: " .. ENV.SESSIONID)
luac ã§ã³ã³ãã€ã«ã§ããŸã:
luac -o ãã¹ã.luac -s ãã¹ã.lua
ãããŠãããã«è¿œå ããã haserl ããããŒ:
echo '#!/usr/bin/haserl --shell=luac' | ç« - test.luac > luac.cgi
ãŸãã¯ãæšæºã® lua ã·ã§ã«ã䜿çšã㊠Web ãµã€ãå šäœãéçºããããšãã§ããŸãã
ãããŠãhaserl èªäœã luac ã³ã³ãã€ã©ã®ã¹ã¯ãªãããååŠçããŸãã
ãã«ãããã»ã¹ã ãããè¡ãã«ã¯ã --shell=lua ã䜿çšã㊠Web ãµã€ããéçºããŸãã ãã«ãã®æºåãã§ããã
--debug è¡ã lua ã¹ã¯ãªããã«è¿œå ããããããå®è¡ããŠåºåããŸãã
çµæã .lua ãœãŒã¹ ãã¡ã€ã«ã«åºåããŸãã äŸãã°ïŒ
haserl ã¹ã¯ãªãã test.cgi ãäžããããå Žå:
#!/usr/bin/haserl --shell=lua --debug
ã³ã³ãã³ãã¿ã€ã: ããã¹ã/ãã¬ãŒã³
ãã®å®è¡ã® UUID 㯠<%= ENV.SESSIONID %> ã§ã
haserl luac ããããŒãããªã³ã³ãã€ã«ãã³ã³ãã€ã«ãããã³è¿œå ããŸãã
./test.cgi > test.lua
luac -s -o ãã¹ã.luac ãã¹ã.lua
echo '#!/usr/bin/haserl --shell=luac' | ç« - test.luac > luac.cgi
onworks.net ãµãŒãã¹ã䜿çšããŠãªã³ã©ã€ã³ã§ haserl ã䜿çšãã