ãšã³ããªãŒ
ãã¹ãã®èªååã®ã¿ã¹ã¯ã¯æ°ãããã®ã§ã¯ãããŸããããããã§ãWebã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã®åéã§å©çšå¯èœãªããŒã«ã«ã¯éçããããŸãã
çæéã§æŽæ°ããå¿ èŠããã100çš®é¡ã®Webã¢ããªã±ãŒã·ã§ã³ãããããããã®æ©èœãæ€èšŒãããã¹ãããªãå Žåã¯ã©ããªããŸããïŒ UIãã¹ãã®éçºã«ã¯æéãããããŸããã curlãªã¯ãšã¹ããäœæãã200 OKãæ»ã£ãããšã確èªããã ãã§ã¯ååã§ã¯ãããŸããã
åççãªåŠ¥åãå¿ èŠã§ããã·ã³ãã«ã§ãããšåæã«ãèªåãã¹ãã®éçºã«ååãªæ±çšããŒã«ã§ãã ããã§SWATãçãŸããŸããã
æ ¹æ ã®ã¢ã€ãã¢
ãããã£ãŠããšã³ããŠãŒã¶ãŒã®èŠ³ç¹ããèŠãSWATã¯ããã¹ãã¹ã¯ãªãããå®è¡ããããã®ã³ã³ãœãŒã«ã¯ã©ã€ã¢ã³ããšãããããèšè¿°ããããã®èšèªïŒ DSL ïŒã§ãã
ãŠãŒã¶ãŒã¯ãã¹ãã¹ã¯ãªãããç¹å®ã®åœ¢åŒã§äœæããå¥ã®ãã£ã¬ã¯ããªã«é 眮ããŠèµ·åããŸãã äžè¬çã«ããã¹ãŠæ¬¡ã®ããã«ãªããŸãã
$ swat /path/to/your/project/ $base_url
ãããã£ãŠãSWATãããžã§ã¯ãã¯ãWebã¢ããªã±ãŒã·ã§ã³ããã¹ããããšãã«ãã¹ãŠã®httpèŠæ±ãéä¿¡ãããããŒã¹URLãšåæ§ã«ããã¹ãã¹ã¯ãªãããå«ããã©ã«ããŒã§ãã ããŠããããŸã§ã®ãšããæ°ãããã®ã¯äœããããŸãããå€ãã®ã¬ã€ã¢ãŠãã¯åæ§ã®ã¬ã€ã¢ãŠãã䜿çšããŠããŸã... SWATã·ã¹ãã ã®æ¬è³ªã¯äœã§ããïŒ
å°ãã®éãSWATã«ã€ããŠè©±ããŠããããšãå¿ããŠãcurlãŠãŒãã£ãªãã£ã䜿çšããŠéåžžã®httpèŠæ±ãäœæãã grepãŠãŒãã£ãªãã£ã䜿çšããŠå¿çãåæããããšããã§ããªããšæ³åããŠãã ããã
$ curl $base_url | grep foo-bar-baz
å®éãããã¯SWATãã¬ãŒã ã¯ãŒã¯ã®çé«ã§ãã
å šäœã®ãã€ã³ãã¯ããã¹ãããããµãŒããŒããã®å¿çããããŸããŸãªæ€çŽ¢ãå®è¡ã§ããããã¹ããšããŠåã«èªèãã ãæåããhttpã¹ããŒã¿ã¹ã®æ€èšŒãè¿œå ãããããšã§ãã ç§ã®å®è·µã瀺ããŠããããã«ãããã2ã€ã®ã¡ãœããïŒå€§ãŸãã«èšããšã200 OKãæ»ã£ãããšã確èªãã äœãè¿ããããã確èªããïŒã¯ãè¡šé¢ã¹ã¢ãŒã¯ãã¹ãããæ¬æ Œçãªæ©èœçãªãã¹ããŸã§ãããŸããŸãªè€éãã®ãã¹ãã¹ã¯ãªãããèšè¿°ããã®ã«ååã§ãã
ã¢ããªã±ãŒã·ã§ã³ã§ã®ç§ã®å®åçµéšã瀺ããŠããããã«ãSWATã«ã¯å€ãã®èœåããããŸãã
DSLã®èª¬æãšããŒã¿æ§é
SWATã¯ããã¡ã€ã«ãšãã£ã¬ã¯ããªã®åœåã«é¢ããäžé£ã®èŠåã«åºã¥ããŠããŸãã ãŸããä»»æã®ããã¹ãïŒãã®å Žåã¯ãµãŒããŒããã®å¿çïŒãæ€èšŒããããã®ã«ãŒã«ãèšè¿°ããããã®ç¹å¥ãªæ§æãæäŸããŸãã
ãŸããå žåçãªSWATãããžã§ã¯ãã®ãã¡ã€ã«æ§é ã®èª¬æããå§ããŸãããã
ãããã£ãŠãåè¿°ã®ããã«ãSWATãããžã§ã¯ãã¯ããã¹ãããžãã¯ãèšè¿°ãããã¡ã€ã«ãšãµããã£ã¬ã¯ããªã®ãããã£ã¬ã¯ããªã«ãããŸããã
ãŸããæåã«è¡ãå¿ èŠãããã®ã¯ããããžã§ã¯ããäœæããã ãã§ãïŒ
$ mkdir swat-project
è³æã®ç解ãç°¡åã«ããããã«ãããã€ãã®çšèªã玹ä»ããŸãã
Webã¢ããªã±ãŒã·ã§ã³ã®ãã¹ããåŠçããå Žåã䜿çšå¯èœãªãªãœãŒã¹ã«ã€ããŠè©±ãåãããããŸããŸãªhttp ã¡ãœããã䜿çšããŠãªã¯ãšã¹ããéä¿¡ã§ããã«ãŒãã«ã€ããŠç°¡åã«èª¬æããŸãã
ãã®ããããã¹ãããŠããã¢ããªã±ãŒã·ã§ã³ã«ã¯ããããã«ã¢ã¯ã»ã¹ããããã®æ¬¡ã®ãªãœãŒã¹ãšã¡ãœããã®ã»ããããããšããŸãã
GET / # GET foo/bar # GET foo/bar POST bar/baz # POST bar/baz
SWATã䜿çšããŠãã®æ§æãèšè¿°ããããã«å¿ èŠãªãã®ã¯ã»ãšãã©ãããŸãããSWATãããžã§ã¯ãã§æ¡çšãããŠããå¥çŽã䜿çšããŠãã ãããã€ãŸãããªãœãŒã¹ã¯åãªããã£ã¬ã¯ããªã§ãããã¡ãœããã¯ãã¡ã€ã«ã§ãã å®éã«ã¯æ¬¡ã®ããã«ãªããŸãã
$ cd swat-project $ mkdir -p foo/bar $ mkdir -p bar/baz $ touch get.txt $ touch foo/bar/get.txt $ touch bar/baz/post.txt # ...
ååãæ確ã§ããããšãé¡ã£ãŠããŸãã ãã£ã¬ã¯ããªåã¯httpãªãœãŒã¹åã«å¯Ÿå¿ãããã¡ã€ã«åã¯httpã¡ãœããåã«å¯Ÿå¿ããŸãã ã¡ãœãããã¡ã€ã«åã«* .txtæ¡åŒµåãå«ãŸããçç±ã¯ãåŸã»ã©æããã«ãªããŸãããä»ã¯ããã«æ³šæãæã£ãŠããŸããã
ããã§ãšãããããŸãïŒ å®è¡å¯èœãªæå°éã®ãã¹ãã»ãããäœæããŸããïŒãã¡ãããèŠæ±ãåãå ¥ããWebãµãŒãã¹ããããšä»®å®ããŸãïŒã
$ cd swa-project $ swat ./ 127.0.0.1:3000 /home/vagrant/.swat/.cache/31999/prove/00.GET.t ........... ok 1 - GET 127.0.0.1:3000/ succeeded # response saved to /home/vagrant/.swat/.cache/31999/prove/KBoHRGrYRm 1..1 ok /home/vagrant/.swat/.cache/31999/prove/bar/baz/00.POST.t .. ok 1 - POST 127.0.0.1:3000/bar/baz succeeded # response saved to /home/vagrant/.swat/.cache/31999/prove/z5lXw_dCLa 1..1 ok /home/vagrant/.swat/.cache/31999/prove/foo/bar/00.GET.t ... ok 1 - GET 127.0.0.1:3000/foo/bar succeeded # response saved to /home/vagrant/.swat/.cache/31999/prove/_DnvkvcUBw 1..1 ok All tests successful. Files=3, Tests=3, 0 wallclock secs ( 0.04 usr 0.02 sys + 0.25 cusr 0.03 csys = 0.34 CPU) Result: PASS
ã芧ã®ãšãããSWATã¯ãã¡ã€ã«æ§é ãæ£åžžã«è§£æããäžé£ã®httpèŠæ±ã«å€æããŠå®è¡ããŸãã ãã®å Žåãããã©ã«ãã§ã¯ããµãŒããŒããã®å¿çã¯æåããhttpã¹ããŒã¿ã¹ã®ååšã«ã€ããŠæ€èšŒããããµãŒããŒããã®ãšã©ãŒã®å Žåããã®ãããªãã¹ãã¯ãã¹ããŸããã
$ cd swat-project # : $ mkdir unknown $ touch unknown/get.txt # SWAT : $ swat ./ 127.0.0.1:3000 /home/vagrant/.swat/.cache/32379/prove/bar/baz/00.POST.t .. ok 1 - POST 127.0.0.1:3000/bar/baz succeeded # response saved to /home/vagrant/.swat/.cache/32379/prove/Um9VB1zVyS 1..1 ok /home/vagrant/.swat/.cache/32379/prove/unknown/00.GET.t ... not ok 1 - GET 127.0.0.1:3000/unknown succeeded # Failed test 'GET 127.0.0.1:3000/unknown succeeded' # at /usr/local/share/perl/5.20.2/swat.pm line 81. # curl -X GET -k --connect-timeout 20 -m 20 -L -f -i -o /home/vagrant/.swat/.cache/32379/prove/TJO6JpsClL --stderr /home/vagrant/.swat/.cache/32379/prove/TJO6JpsClL.stderr '127.0.0.1:3000/unknown' # % Total % Received % Xferd Average Speed Time Time Time Current # Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (22) The requested URL returned error: 404 Not Found # can't continue here due to unsuccessfull http status code 1..1 # Looks like you failed 1 test of 1. # Looks like your test exited with 1 just after 1. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/1 subtests /home/vagrant/.swat/.cache/32379/prove/foo/bar/00.GET.t ... ok 1 - GET 127.0.0.1:3000/foo/bar succeeded # response saved to /home/vagrant/.swat/.cache/32379/prove/N0i8or4eCR 1..1 ok /home/vagrant/.swat/.cache/32379/prove/00.GET.t ........... ok 1 - GET 127.0.0.1:3000/ succeeded # response saved to /home/vagrant/.swat/.cache/32379/prove/eQpLp7zbAw 1..1 ok Test Summary Report ------------------- /home/vagrant/.swat/.cache/32379/prove/unknown/00.GET.t (Wstat: 256 Tests: 1 Failed: 1) Failed test: 1 Non-zero exit status: 1 Files=4, Tests=4, 1 wallclock secs ( 0.03 usr 0.02 sys + 0.28 cusr 0.02 csys = 0.35 CPU) Result: FAIL
ãã®ãããåªããç¹ãšããŠãSWATã¯æªç¥ã®ãªãœãŒã¹ãæ£åžžã«æ€èšŒããããšã«ããããŸãã¯åã«ãµãŒããŒããåä¿¡ããå¿çã®httpã¹ããŒã¿ã¹ãåæããããšã«ããæ©èœããããšãããããŸãã
SWATãã©ã®ããã«ãªã¯ãšã¹ããè¡ããã«ã€ããŠãããã€ãã®èšèãèšãããã§ãã curlãŠãŒãã£ãªãã£ãŒã¯ãhttpèŠæ±ãçæããããã«äœ¿çšãããŸãã ããšãã°ãPerlã®ã©ã€ãã©ãªãªã©ãcurlãéžæãããŠäœ¿çšãããªãã£ãã®ã¯ãªãã§ããïŒ ïŒäŸïŒ LWP ïŒã ç§èŠãã«ãŒã«ã®å Žåã®éèŠãªå©ç¹ã®1ã€ã¯ã䜿ãããããåªããããã¥ã¡ã³ãããµããŒãã§ãïŒæè¿ãéèŠã§ã¯ãªããã±ãããå§ããŸããããæ°åã§çããããŸããïŒã ãã®ãŠãŒãã£ãªãã£ã䜿çšããŠããéãcurl web socketsãã§ããªãéããcurlã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠå®è£ ã§ããªãã¿ã€ãã®httpèŠæ±ã«åºãããããšã¯ã»ãšãã©ãããŸããã§ãã...
ãã®ãããSWATã¯curlã䜿çšããŠhttpèŠæ±ãäœæããŸãã ããã¯ããã®ãŠãŒãã£ãªãã£ã«é¢ããŠããªã¯ãšã¹ãã«å¿ èŠãªãã¹ãŠã®ãã©ã¡ãŒã¿ãŒãèšè¿°ããããšãæå³ããŸãã ãã®ããã«ãããããã¯ãšãªèšå®ã䜿çšãããŸã-swat.iniãã¡ã€ã«ããªãœãŒã¹ãã£ã¬ã¯ããªå ã§ãŠãŒã¶ãŒãäœæããcurlãåŒã³åºãããã®ãã©ã¡ãŒã¿ãŒãå«ãããã®åäœã決å®ããåãã¹ãã¹ã¯ãªããã®è¿œå ãã©ã¡ãŒã¿ãŒãèšå®ã§ããŸãã äŸãæããŸãã
$ cat bar/baz/swat.ini # POST/GET curl_params="-d name=Alexey -d age=39" $ cat foo/bar/swat.ini # http curl_params="-H 'Content-Type: application/json'" $ cat login/swat.ini # http basic curl_params="-ufoo-user:foo-password'" $ cat slow-route/swat.ini # - try_num=3
swat.iniãã¡ã€ã«ã§èšå®ã§ãããã©ã¡ãŒã¿ãŒã®ãªã¹ãã®è©³çŽ°ã«ã€ããŠã¯ã ããã¥ã¡ã³ããåç §ããŠãã ããã
swat.iniãã¡ã€ã«ã¯éåžžã®bashã¹ã¯ãªããã§ããããšã«æ³šæããããšãéèŠã§ããç¹ã«ãæšæºã®bashã³ã³ã¹ãã©ã¯ãã䜿çšã§ããŸããåµé æ§ã®äœå°ãå€ããäŸãããç解ããããã«ãSWATããã¥ã¡ã³ãã®ããŒãžã«èå³ã®ããèªè ãéããŸãã
ããŠããã¹ãŠã¯åé¡ãããŸããããã芧ã®ãšããããµãŒããŒããã®å¿çã確èªããåã«äžåºŠãèšã£ãããšã¯ãããŸãããçå®ãé€ããhttpã¹ããŒã¿ã¹ã®ã¿ã§ãã äžèšã®äžé£ã®ãã¹ããå®è¡ããããšã§ç解ã§ããããšãã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ã®ç¹å®ã®ã»ãããå©çšå¯èœã§ããããããã®ãªãœãŒã¹ãèŠæ±ãããšãã«ãµãŒããŒãæåïŒ200 OKïŒå¿çãè¿ããããšããã¹ãŠç解ããŸããã
SWAT DSLã«ã€ããŠè©±ãããæãæ¥ãŸããã
SWAT DSL
SWAT DSLã¯ããã¬ãŒã ã¯ãŒã¯ã®2çªç®ã®ïŒãªãœãŒã¹ãšã¯ãšãªèšå®ã説æããåŸã®ïŒã¡ã€ã³ã³ã³ããŒãã³ãã§ãã DSLã䜿çšãããšããµãŒããŒããåä¿¡ããå¿çããã§ãã¯ããŠãåäžè¡ã¹ããŒãã¡ã³ããšããŠèª¬æãããŠããããã€ãã®ã«ãŒã«ã«æºæ ããŠãããã©ããã確èªã§ããŸãã
RULE1 RULE2 # ...
ã¹ããŒãã¡ã³ãã«æºæ ããŠããªãå Žåããã¹ããšã©ãŒãçæãããŸãã ã¹ããŒãã¡ã³ãããšã«ãçããå床ãã§ãã¯ãããŸãã ããã¯ãæ€èšŒããã»ã¹ã®æ£åŒãªèª¬æã§ãã å®éããã¹ãŠãããåçŽã§ãããã¹ããŒãã¡ã³ãã¯ããµãŒããŒã®å¿çã§è¡šç€ºãããããã¹ããŸãã¯æ£èŠè¡šçŸã®åãªãæ®éã®è¡ã§ãã
äŸãæããŸãã
# # , SWAT , # 200 OK # regexp: (red|green|blue) # # , , # - HELLO WORLD # regexp: ^HELLO WORLD$
äžèšã®äŸã®åŸã次ãè¿œå ããŸãã
- SWATã¯DSLãçŽæ¥æäŸããŸããããããã¹ãããŒã¿ã®æ€èšŒã«æ¢è£œã®ã¢ãžã¥ãŒã«Outthentic-DSLã䜿çšããŸãã SWAT DSLã®æ©èœãããæ·±ãç解ããã«ã¯ããã®ã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ãã䜿çšããŠãã ãã
- ã«ãŒã«ãŸãã¯ïŒãã®çšèªã®å矩èªïŒæ€èšŒã¹ããŒãã¡ã³ããèšè¿°ãããšããã³ã¡ã³ãã䜿çšã§ããŸã
- DSLã¹ã¯ãªããã解æãããšãã空çœãŸãã¯ç©ºçœè¡ã®ã¿ãå«ãè¡ã¯ç¡èŠãããŸã
- SWATã¯è¡åäœã®æ€èšŒã¢ãŒãã䜿çšããŸããã€ãŸãããµãŒããŒããã®å¿çãè¡ã«åå²ãããåè¡ã次ã®ã«ãŒã«ãšæ¯èŒãããŸãã å°ãªããšã1è¡ãã«ãŒã«ã«äžèŽããå ŽåãSWATã¯ã³ã³ãœãŒã«ã¯ã©ã€ã¢ã³ãããã®åºåã§ã¬ããŒãããããããã®ã«ãŒã«ã®ãã¹ãã¯åæ ŒãšèŠãªãããããã§ãªãå Žåã¯åæ Œãšã¿ãªãããŸãã
- è€æ°è¡ã®ãã§ãã¯ãå¿ èŠãªå Žå-SWATãããã¯ã䜿çšã§ããŸã
- æ£èŠè¡šçŸã®æ§æã¯ãPerlã®æ£èŠè¡šçŸãšäžèŽããå¿ èŠããããŸãã Perlã§æžãããSWAT DSL
- æ€èšŒã«ãŒã«ã¯éçãã€ãŸã ããã§ã®äŸã®ããã«äºåã«èª¬æããŸãããSWATã¯ã ãžã§ãã¬ãŒã¿ APIãä»ããŠãœãããŠã§ã¢APIãä»ããŠããã®ãããªã«ãŒã«ãåçã«èšå®ããæ©èœãæäŸããŸã
- ãã®èšäºã§ã¯ãDSLã®ãã¹ãŠã®æ©èœãšãã¹ãã¹ããŒãã¡ã³ããèšè¿°ããããã®ã«ãŒã«ã«ã€ããŠèšåããããšã¯ã§ããŸããããããã¯éåžžã«å€æ§ã§å€æ°ãããããèå³ã®ããèªè ã«ã¯ããã¥ã¡ã³ãããŒãžãåç §ããŠãã ããã
æ€èšŒã«ãŒã«ãäœæããããã®DSLããããŸãããçåã¯æ®ããŸãããããã®ã«ãŒã«ãã©ãã§äœæããã®ã§ãããã çãã¯ããèªäœã瀺åããŠããŸã-ãã¡ãããhttpã¡ãœãããã¡ã€ã«ã§ïŒ ïŒã¡ãœãããã¡ã€ã«åã®* .txtæ¡åŒµåã«é¢ããã³ã¡ã³ããæãåºããŠãã ããïŒã
ããŸããŸãªãªãœãŒã¹ãèŠæ±ãããšãã®ãµãŒããŒããã®å¿çã«ããã€ãã®ãã§ãã¯ãè¿œå ããŠã以åã®äŸãæžãæãããããããæŽæ°ããŸãã
$ cat get.txt HELLO USER! THIS IS INDEX PAGE $ cat foo/bar/get.txt I AM FOO-BAR $ cat bar/baz/post.txt POST TO BAR-BAZ OK
次ã«ããã¹ããå床å®è¡ããŸãã
$ cd swat-project $ swat ./ 127.0.0.1:3000 /home/vagrant/.swat/.cache/1422/prove/foo/bar/00.GET.t ... ok 1 - GET 127.0.0.1:3000/foo/bar succeeded # response saved to /home/vagrant/.swat/.cache/1422/prove/CmDiEY28iD ok 2 - output match 'I AM FOO-BAR' 1..2 ok /home/vagrant/.swat/.cache/1422/prove/bar/baz/00.POST.t .. ok 1 - POST 127.0.0.1:3000/bar/baz succeeded # response saved to /home/vagrant/.swat/.cache/1422/prove/rX8oenyA0j ok 2 - output match 'POST TO BAR-BAZ OK' 1..2 ok /home/vagrant/.swat/.cache/1422/prove/00.GET.t ........... ok 1 - GET 127.0.0.1:3000/ succeeded # response saved to /home/vagrant/.swat/.cache/1422/prove/PxDCnlbOA5 ok 2 - output match 'HELLO USER! THIS IS INDEX PAGE' 1..2 ok All tests successful. Files=3, Tests=6, 0 wallclock secs ( 0.03 usr 0.00 sys + 0.24 cusr 0.00 csys = 0.27 CPU) Result: PASS
ã芧ã®ãšãããSWATã¯ãã®ä»äºãè¡ãããµãŒããŒããã®å¿çãæ€èšŒããŸããã ããã¯ãå®äºã§ããSWAT DSLã®æåã®ç¥äººã§ãã
ãã®èšäºã®çµããã«ãSWATã®ãã1ã€ã®èå³æ·±ãæ©èœã玹ä»ããããšæããŸããããã«ãããæãåçŽãªãã§ãã¯ã ãã§ãªããæ¬æ Œçãªæ©èœãã¹ããäœæã§ããŸãïŒæåã«SWATã«ã¯å€ãã®æ©èœããããšèšã£ãŠããããšãæãåºããŠãã ãã...ïŒã ããã§ã¯ãåå©çšå¯èœãªhttpãªã¯ãšã¹ãã«ã€ããŠè©±ããŸãããã
åå©çšå¯èœãªhttpãªã¯ãšã¹ã
å€ããå°ãªããè€éãªWebã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã¯ãå€ãã®åå¥ã®ãªãœãŒã¹ãŸãã¯ã«ãŒãã«å解ãããŠãããå®éããããã®ãªãœãŒã¹ã«é¢ããŠåŒ·ããæ¥ç¶ããããŠããŸãã ããã¯ç§ãèšãããããšã§ã-ãããªãœãŒã¹ãžã®ãªã¯ãšã¹ãã¯ãå€ãã®å Žåãå¥ã®ãªãœãŒã¹ãžã®äºåçãªãªã¯ãšã¹ããæå³ããŸãã ã€ãŸã åã ã®ãªãœãŒã¹ã«å¯Ÿããåäžã®ç¬ç«ãããªã¯ãšã¹ãã«ã€ããŠã§ã¯ãªãããã®ãããªãªã¯ãšã¹ãã®ãã§ãŒã³ã«ã€ããŠè©±ããŠããŸãã äŸã¯æããã§ãïŒ
- èªèšŒ/æ¿èªãå¿ èŠãšãããªãœãŒã¹ãžã®ã¢ã¯ã»ã¹
- ããŒã¿ããŒã¹å ã®ã¬ã³ãŒãã®äœæãå€ãã¬ã³ãŒãã®äºååé€ãå¿ èŠ
- æ¡ä»¶ä»ãã¯ãšãª-ããŒã¿ããŒã¹ããã¬ã³ãŒããåé€ããŸãïŒããå ŽåïŒ
ãªã©...
æããã«ãã1ã€ã®ãã¹ã-1ã€ã®ãªãœãŒã¹-1ã€ã®èŠæ±ããšããã¢ãããŒãã§ã¯ããã®ãããªãã¹ãã·ããªãªã¯å®è¡äžå¯èœã§ãã 1ã€ã®ãªãœãŒã¹ã«ãªã¯ãšã¹ããè¡ãåã«ãäœããã®æ¹æ³ã§ã1ã€ãŸãã¯å Žåã«ãã£ãŠã¯è€æ°ã®ä»ã®ãªãœãŒã¹ã«ãªã¯ãšã¹ããè¡ãå¿ èŠããããŸãã ã©ãããïŒ ãããŠããã§ãSWAT ã¢ãžã¥ãŒã«ãç§ãã¡ã®å©ãã«ãªããŸã-åå©çšå¯èœãªhttpãªã¯ãšã¹ãã
äžè¬çã«ãSWATã¢ãžã¥ãŒã«ã¯é¢æ°ã«éåžžã«äŒŒãŠãããäžåºŠå®çŸ©ãããšãå¿ èŠã«å¿ããŠäœåºŠã§ãåŒã³åºãããšãã§ããŸããå¿ èŠã«å¿ããŠãã¢ãžã¥ãŒã«å ¥åã«åæãã©ã¡ãŒã¿ãŒãæž¡ããçµæãåŠçããŸããSWATã§ã¯ã ã¢ããã¹ããªãŒã /ããŠã³ã¹ããªãŒã å±¥æŽã¡ã«ããºã ãéããŠå®è£ ãããŸãã
ãããã£ãŠãSWATã¢ãžã¥ãŒã«ã«ã€ããŠç解ããå¿ èŠããããã®ïŒ
- ãããã¯ãSWATãããžã§ã¯ãã§äœæãããä»ã®ãã¹ãŠãšåãhttpãªãœãŒã¹ã§ããå¯äžã®éãã¯ãSWATãã¢ãžã¥ãŒã«ãçŽæ¥åŒã³åºããªãïŒhttpãªãœãŒã¹ã«é¢é£ããèŠæ±ãå®è£ ããïŒããšã§ãã
- å¥ã®ãªãœãŒã¹ã¯ãSWAT HOOKs APIãä»ããŠSWATã¢ãžã¥ãŒã«ãåŒã³åºãããšãã§ããŸã
- å¥ã®ãªãœãŒã¹ã§SWATã¢ãžã¥ãŒã«ãåŒã³åºãããšã¯ãæåã«SWATãã¢ãžã¥ãŒã«ãªãœãŒã¹ã«å¯ŸããŠhttpèŠæ±ãäœæããå¿çãæ€èšŒããããšãæå³ããŸãïŒã€ãŸããhttpã¹ããŒã¿ã¹ã®ãã§ãã¯ãããªãœãŒã¹ã«å®çŸ©ãããã«ãŒã«ã«ããæ€èšŒãŸã§ããã®ãªãœãŒã¹ã«é¢é£ä»ãããããã§ãã¯ãã§ãŒã³å šäœãå®è¡ããŸãïŒããããŠãSWATã¢ãžã¥ãŒã«ãåŒã³åºãããã¡ã€ã³ãªãœãŒã¹ã«å¯ŸããŠãªã¯ãšã¹ããè¡ããŸãã
- SWATã®ããã¥ã¡ã³ãããŒãžã§ã¯ãããçš®ã®SWATã¢ãžã¥ãŒã«ãåŒã³åºããªãœãŒã¹ã¯ã¢ããã¹ããªãŒã ã¹ããŒãªãŒïŒã¡ã€ã³ã¹ããŒãªãŒïŒãšåŒã°ããåŒã³åºãããSWATã¢ãžã¥ãŒã«ïŒããŠã³ã¹ããªãŒã ã¹ããŒãªãŒïŒã¯ã»ã«ã³ããªã¹ããŒãªãŒã§ãã çšèªã¯jenkins-ci.orgããåãããŠããŸãããSWATã§ã¯ãã®ã¢ãã«ã¯éã«ãªã£ãŠããŸãã Jenkinsã§ã¯ãã¡ã€ã³ã¿ã¹ã¯ã®åŸã«ããŠã³ã¹ããªãŒã ãžã§ããåŒã³åºãããŸã
- SWAT HOOKs API-Perlã³ãŒãïŒãã®ã³ã³ããã¹ãã§ã¯HOOKS APIïŒãèšè¿°ããããšã§SWATãã¹ãã¹ã¯ãªãããæ¡åŒµããæ©èœã«ãããSWATã¢ãžã¥ãŒã«ãããã°ã©ã ã§åŒã³åºãããšãã§ããŸãã
äžèšã®ãã¹ãŠãç°¡åãªäŸã§èª¬æããŸãããã 2ã€ã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãæäŸããWebãµãŒãã¹ãçšæããŸãããã
POSTãã°ã€ã³/-ãŠãŒã¶ãŒèªèšŒçšã®ãªãœãŒã¹ã æå¹ãªãã°ã€ã³ãšãã¹ã¯ãŒãããµãŒããŒã«éä¿¡ããããšãã¢ããªã±ãŒã·ã§ã³ã¯Cookieã»ãã·ã§ã³ãè¿ããŸãã ç°¡åã«ããããã«ããµãŒããŒã¯POSTèŠæ±ã®ååä»ããã£ãŒã«ãïŒãŠãŒã¶ãŒãšãã¹ã¯ãŒãïŒãä»ããŠãŠãŒã¶ãŒåãšãã¹ã¯ãŒããåãå ¥ãããšæ³å®ããŠããŸãã
GETå¶éä»ã/-èªèšŒããããŠãŒã¶ãŒã®ã¿ãä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã®SWATãã¹ããäœæããŸãã ããã§ã®æãããªãã¹ãã¹ããŒãªãŒã¯ãå®å šãªGETå¶éãªãœãŒã¹ãèªèšŒããŠã¢ã¯ã»ã¹ããããšã§ãã
ãªãœãŒã¹ãšã¡ãœãããèšè¿°ãããããžã§ã¯ãã¹ã±ã«ãã³ãäœæããŸãããã
$ mkdir swat-project $ cd swat-project $ mkdir login $ mkdir restricted $ touch login/post.txt $ touch restricted/get.txt
ããã§ããã°ã€ã³/ãªãœãŒã¹ãSWATã¢ãžã¥ãŒã«ã§ããããšã宣èšããå¿ èŠããããŸãã GETå¶éä»ã/ãªãœãŒã¹ãåŒã³åºãåã«åŒã³åºãå¿ èŠããããŸãã
ãã®ããã«ãªãœãŒã¹èšå®ãã¡ã€ã«ã䜿çšããŸã-swat.iniãã¡ã€ã«ïŒ
$ cat login/swat.ini swat_module=1
swat_moduleå€æ°ã1ã«èšå®ãããšããªãœãŒã¹ãSWATã¢ãžã¥ãŒã«ãšããŠå®£èšãããŸãã
èªèšŒã«å¿ èŠãªãã©ã¡ãŒã¿ãŒãè¿œå ããŸãã ãã®å ŽåãäŸãç°¡åã«ããããã«ããã°ã€ã³ãšãã¹ã¯ãŒãã¯æ瀺çã«èšå®ãããŸãããSWATã§ã¯ããã®çš®ã®ãã©ã¡ãŒã¿ãŒããããžã§ã¯ãããåé€ããã»ãã¥ãªãã£äžã®çç±ããå¥ã®å Žæã«èšå®ããããšãã§ããŸãã
$ cat login/swat.ini swat_module=1 url_params="-d user=my-login -d password=my-password"
ãããŠæåŸã«ãæåŸã®ä»äžã-èªèšŒãæåããå Žåã«ãµãŒããŒãCookieãè¿ããŸããã©ããã«ä¿åããå¿ èŠããããŸããåãcurlãŠãŒãã£ãªãã£ãŒã®cookie-jarã¡ã«ããºã ã䜿çšããŸãããªãœãŒã¹ã«å¯ŸããèŠæ±ã®æçµããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
$ cat login/swat.ini swat_module=1 # $test_root_dir - , # # url_params="-d user=my-login -d password=my-password --cookie-jar $test_root_dir/cookie.txt"
OKãPOSTãã°ã€ã³/æºåå®äºãªãœãŒã¹ã æåã¹ããŒã¿ã¹ïŒ200 OKïŒã«å ããŠããµãŒããŒãæ»ãå¿ èŠãããããšãããã£ãŠããå ŽåïŒãããŠ;-)ïŒãã¡ãœãããã¡ã€ã«ã«è¿œå ã®ãã§ãã¯ãè¿œå ã§ããŸãã
$ cat login/post.txt hello user!
GETå¶éä»ã/ãåŒã³åºãåã«POSTãã°ã€ã³/ãåŒã³åºããŸããããã¯æ¬¡ã®ããã«è¡ãããŸãã
$ cat restricted/hook.pm run_swat_module( POST => '/login' );
ç§ãã¡ã¯äœãããŸãããïŒ GETå¶é/ãªãœãŒã¹çšã®ããã¯ãã¡ã€ã«ãäœæãã æåã« POSTãã°ã€ã³/ãªã¯ãšã¹ããè¡ãããšãèŠæ±ããŸãã
ç§ãã¡ã¯äœãæ®ããŸãããïŒ GETå¶éä»ãåŒã³åºã/ãèšå®ããŠãPOSTãã°ã€ã³/çµç±ã®èªèšŒãæåããåŸã«äœæãããCookieã䜿çšããããã«ããŸãã
$ cat restricted/swat.ini url_params="--cookie $test_root_dir/cookie.txt"
ãŸããPOSTãã°ã€ã³/ãªãœãŒã¹ãšåæ§ã«ãGETå¶é/ãªã¯ãšã¹ãã®å ŽåããµãŒããŒããã®å¿çã«è¿œå ã®ãã§ãã¯ãèšå®ã§ããŸãã
$ cat login/get.txt restricted content
åå©çšå¯èœãªSWATãªã¯ãšã¹ãã«é¢ããŠä»ã«ç°¡åã«èšåãããããšã¯ãããŸããïŒæ®å¿µãªããããã®èšäºã®åœ¢åŒã§ã¯ãã¹ãŠã®è³æãå®å šã«é瀺ããããšã¯ã§ããŸããïŒã ç§ã¯è«æããªã¹ãããŸãïŒ
- SWATã¢ãžã¥ãŒã«ã®ã«ã¹ã±ãŒãåŒã³åºã-éåžžã®æ©èœãšåæ§ã«ã1ã€ã®ã¢ãžã¥ãŒã«ãå¥ã®ã¢ãžã¥ãŒã«ãåŒã³åºãããšãã§ããŸãã
- ã¡ã€ã³ãªãœãŒã¹ãšãã®äžã§åŒã³åºãããSWATã¢ãžã¥ãŒã«éã®ããŒã¿ïŒç¶æ ïŒã®è»¢éã ã¯ããå¯èœã§ãã çŽç²ã«æè¡çã«ã¯ãã¢ãžã¥ãŒã«ãšãããåŒã³åºããã³ãŒãã¯1ã€ã®ããã»ã¹ã§å®è¡ãããŸãã ããã¥ã¡ã³ããåç §ããŠãã ãã
- SWATã¢ãžã¥ãŒã«ã®å ¥åã«ãã©ã¡ãŒã¿ãŒãæž¡ããã¢ãžã¥ãŒã«ãå®è£ ããã³ãŒãå ã§ãããã«ã¢ã¯ã»ã¹ããŸã-ããã¯ã¢ãžã¥ãŒã«å€æ°ãšåŒã°ããŸããããã¥ã¡ã³ããåç §ããŠãã ãã
ãããã«
èšäºã®æåŸã«ã ãããžã§ã¯ãããŒãžã«ç§»åãããŠãŒãã£ãªãã£ã®ã€ã³ã¹ããŒã«æ¹æ³ãšäœ¿çšæ¹æ³ãåŠã³ãŸããã...ããšããèšãåãã§çµãããããã¯ãããŸããããæªãã¯ãããŸããã:-)
ããããããã§ããªããä»äºã§SWATã䜿ãå§ããããšãã§ããçç±ããããŸãïŒç§èŠïŒïŒ
- Larry Woll -SWATãèªç±ã«èšãæããããŠãã ãããSWATã䜿çšãããšãã·ã³ãã«ãªãã®ãã·ã³ãã«ã§è€éãªãã®ã«ããããšãã§ããŸãã ãµã³ãã«ã§èšè¿°ããªããã°ãªããªãã³ãŒããéåžžã«å°ãªãããšã«æ³šç®ããŠãã ãããåæã«ãSWATã¯Perlã«æ¡åŒµã§ãã匷åãªããŒã«ã§ãã åºæ¬çãªããã°ã©ãã³ã°ã¹ãã«ãåããã·ã¹ãã 管çè ã§ãããçµéšè±å¯ãªéçºè ã§ãããSWATã¯åæ§ã«äŸ¿å©ã§ç解ãããããã®ã§ãã
- SWATã¯æ倧éã«å®çšçã§ãã ç¹å®ã®åé¡ãã€ãŸãé »ç¹ã«æŽæ°ãããå€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã®èªåãã¹ãã®è¿ éãªéçºã解決ããããã«ãç掻ã®çŸå®ã«åºã¥ããŠçºæãããŸããã SWATããäžèŠãªæ©èœããã¹ãŠåé€ããŸãããåé¡ã解決ããããã«æ倧éã«åŒ·åãããŠããããè² è·ãã«å¯ŸããŠã¯äœãæäŸããŸããã
- SWATã¯ãåºã䜿çšããå®çžŸã®ãããœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠæ§ç¯ãããŠãããã·ã¹ãã 管çè ãšéçºè ã®äž¡æ¹ã«ç¥ãããŠããŸããã€ãŸããcurlãšbashã§ãã curlãç¥ã£ãŠãããªãããã§ã«SWATæ§æã«æ £ããŠããã®ã§ãswatã¯swat.iniãã¡ã€ã«ã®èšå®ãçŽæ¥curlã«å€æããŸãïŒãŸãããŸãã¯ã»ãŒãã®ããã§ã;-)ïŒãbashã®åºæ¬ãç¥ã£ãŠããã°ãSWATèšå®ãç°¡åã«èª¬æã§ããŸããè³æºã®
- SWATã¯è¡æãããžã§ã¯ãSparrowã«ãã£ãŠãµããŒããããŠããŸããã€ãŸããSWATãããžã§ã¯ãã管çããã³éçºããããã®äŸ¿å©ãªã€ã³ãã©ã¹ãã©ã¯ãã£ãšãSWATã«ãã£ãŠäœæããããã¹ããåå©çšããäžå€®ã®SparrowHubãªããžããªããããŠã³ããŒãããŠãåããªããžããªã«ã¢ããããŒãããããšãã§ããŸãã詳现ã«ã€ããŠã¯ããã¡ããšãã¡ããã芧ãã ããã
ã³ã¡ã³ãã質åãåŸ ã£ãŠããŸãã
ããããšã
PSãã®èšäºã§èšåããWebã¢ããªã±ãŒã·ã§ã³ããã³SWATãã¹ãã®ãœãŒã¹ã¯ãããããããŠã³ããŒãã§ããŸãã
ä»åŸã®PPSãã¹ãŠïŒ