PHPerKaigi 2024 ⢠Day 1ã§ã®ç»å£è³æã§ãã https://phperkaigi.jp/2024/ https://fortee.jp/phperkaigi-2024/proposal/0d0f8507-0a53-46f6-bca6-23386d78f17f â» Authorâ¦
Update: ããã°ã«ã¾ã¨ããã 令åæä»£ã® API å®è£ ã®ãã¼ã¹ãã©ã¯ãã£ã¹ã¨ CSRF 対ç | blog.jxck.io CSRF 対ç㯠One Time Token ã form ãªãã«ä»ä¸ãã¦ããµã¼ãå´ã§ãã§ãã¯ããã°è¯ãã ãããããã©ã«ãã§ãµãã¼ããã¦ããã¬ã¼ã ã¯ã¼ã¯ãªã©ããããããªãã¦ãã©ã¤ãã©ãªã§ãããã§ã対å¿ã§ããã ã©ããå®å ¨ã«ã¹ãã¼ãã¬ã¹ãªãµã¼ãã¹ã¯ãªããªããªãã®ã§ããµã¼ãå´ã« redis ã memcache ãç¨æããã®ãå¥ã«å¤§å¤ãããªãã ãªã®ã§ã CSRF 対çã¨ã㦠Token ãä»ä¸ããã®ã¯ãæãå®å ¨ã§æ¨å¥¨ã§ããæ¹å¼ã§ã¯ããã ã£ã¦ããã®ãè¸ã¾ããä¸ã§ããã SameSite=Lax ããã©ã«ãã ãã©ãä»ã§ã Token å¿ é ãªã®ï¼ã¿ãããªã®ããã³ãã³è©±ã«åºãã®ã§ãããå æ¸ã¾ã¨ããã åæ ãã®è©±ã¯ãã¹ã³ã¼ããã©ããªã®ãã«ãã£ã¦è©±ãå¤å°å¤ããã®ã§ãã
å³ã®ããã«ã大壿¬ã®CSRFå¯¾çæ¹å¼ï¼ä»¥ä¸ãã大壿¹å¼ãã¨è¡¨è¨ï¼ã§ã¯ããã¼ã¯ã³ï¼åæ¸ã§ã¯ãã©ã¼ã IDã¨è¡¨è¨ï¼ãã©ã³ãã ãªéµã¨ãã¦çæï¼â¡ï¼ããããããã©ã¼ã ã®é ããã£ã¼ã«ãã¨DBã«ä¿åãã¾ãï¼â¢ãâ£ï¼ãã¦ã¼ã¶ã¼ããã©ã¼ã ããµããããï¼â¤ï¼ããã¨ãéä¿¡ããã¦ãããã¼ã¯ã³ãDBä¸ã«åå¨ããã確èªï¼â¥ï¼ããããã°ãã¼ã¯ã³ãåé¤ï¼â¦ï¼ãã¦ããµã¼ãã¼ä¸ã®å¦çã«é²ã¿ã¾ããâ¥ã§ãã¼ã¯ã³ãDBã«ãªãå ´åã¯ãã¨ã©ã¼ã¨ãã¦å¦çã«ã¯é²ã¿ã¾ããã ä¸è¬çãªCSRFå¯¾çææ³ã¨ã®éã 大壿¹å¼ãä¸è¬çãªCSRF対çã¨ç°ãªãç¹ã¯ä»¥ä¸ã®2ç¹ã§ãã ãã©ã¼ã ã®2éæç¨¿é²æ¢æ©è½ãå ¼ãã¦ãã ãã¼ã¯ã³ãã»ãã·ã§ã³å¤æ°ã§ã¯ãªãDBã«ä¿åããã ãã¼ã¯ã³ã®æå¹ç¯å²ã¯? ãã¼ã¯ã³ãDBã«ä¿åãããå ´åããã¼ã¯ã³ã®æå¹ç¯å²ãæ°ã«ãªãã¨ããã§ãã大壿¬ããã³ç¬¬äºçã®ã½ã¼ã¹ãè¦ãã¨ããã¼ã¯ã³ãä¿åãããã¼ãã«ã®å®ç¾©ã¯ä»¥ä¸ã®éãã§ãã CR
8æ21ï½23æ¥ã«ãã·ãã£ã³æ¨ªæµã§éå¬ããããCEDEC 2013ãã§ã¯ãWebã®ä¸çã«é¢ããã»ãã·ã§ã³ãæ°å¤ãè¡ããããæ¬è¨äºã§ã¯ãã®ä¸ããããµã¤ãã¦ãºã»ã©ãã®ç«¹è¿«è¯ç¯æ°ã«ãããHTML5ã®ããã¾ã§ã¨ãããããææ°æè¡ã®æªæ¥äºæ¸¬ãã¨ãã»ãã¥ãªãã£ã³ãã¥ããã£ã§ã¯å¤§å¤èåãªãããã¨ã¼ã¸ã§ã³ããé·è°·å·é½ä»æ°ã«ãããHTML5æä»£ã«ãããã»ãã¥ãªãã£ãæèããéçºãã®2ã¤ã®ã»ãã·ã§ã³ã®æ§åããéããããã 竹迫æ°ããHTMLãã®å¨ãã®ææ°æè¡ã¨ã3ã¤ã®æªæ¥äºæ¸¬ãèªã æªæ¥äºæ¸¬ãã®1ï¼éä¿¡ã¯æå·åãæ¨æºã«ââãã¹ã¿ãã§ãã¤ãªã³ã°ãããèããææ°æè¡ 竹迫æ°ã¯ã¾ããã¹ã¿ã¼ããã¯ã¹ã§ã¹ã¿ã¤ãªãã·ã¥ãªMacBook Airãããè¦ãããã«ä½¿ããããã¤ãªã³ã°ãã¨ããæè¡ï¼ï¼ï¼ã«ã¤ãã¦åçãåºãã¨ããããè¬æ¼ãå§ããã å®ã¯ããã®ããã¤ãªã³ã°ããå ¬è¡ç¡ç·LANãå©ç¨ããã¨çè´ã®ãªã¹ã¯ããããã¨ãææããã¦
å æ¥ãtwitterä¸ã®ç¯è¡äºåã«ãã20æ³ã®éå¹´ã鮿ãããããã§ããããªããã¾ãã«ãã誤èªé®æã§ã¯ãªãã£ãã®ãæ°ã«ãªãã¨ããã§ããããã§ãtwitterãããªããã¾ãæç¨¿ãã©ã®ç¨åº¦å¯¾çãã¦ãããã調ã¹ã¦ã¿ããã¨ã«ãã¾ãããtwitterã®å®å ¨æ§ã確èªãããã¨ãç®çã¨ããããããtwitterã宿½ãã¦ãã対çãç¥ããã¨ã«ãããçæ§ã®Webãµã¤ããå®å ¨ã«ããåèã«ãã¦ããã ããã°ã¨æãã¾ãã ä»å調ã¹ãããªããã¾ãæç¨¿ãã®ææ³ã¯ä¸è¨ã®éãã§ãã ã¯ãã¹ãµã¤ãã»ãªã¯ã¨ã¹ãã»ãã©ã¼ã¸ã§ãª(CSRF) ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°ï¼XSSï¼ HTTPãããã¼ã¤ã³ã¸ã§ã¯ã·ã§ã³ ã¯ãªãã¯ã¸ã£ããã³ã° DNSãªãã¤ã³ãã£ã³ã° ã¯ããã¼ã¢ã³ã¹ã¿ã¼ãã° ãã®ãã¡ãä¸ã®5ã¤ã®è§£èª¬ã¯æç¨¿ãâ誤èªé®æâãé²ãWebã»ãã¥ãªãã£å¼·åè¡ããæå¾ã®ã¯ããã¼ã¢ã³ã¹ã¿ã¼ãã°ã«ã¤ãã¦ã¯ãéå»ã®ã¨ã³ããªãã¯ããã¼ã¢ã³ã¹ã¿ã¼
XMLHttpRequestã使ã£ãCSRF対ç - èã£ã±æ¥è¨ãæ¸ãã¦ãã¦æã£ããã©ããã¾ãã¡XHRã使ã£ãCSRF(ã¨ãããã¯ãã¹ãªãªã¸ã³éä¿¡)ã«ã¤ãã¦çè§£ããã¦ããªããããªæãã ã£ãã®ã§ãã¡ãã£ã¨æ¸ãã¦ããã¾ããã¨ããããæ¥æ¬èªã®ãªã½ã¼ã¹çã«ã¯ãHTTP access control | MDN ã詳ããã¦ããããèªãã°ã ãããäºè¶³ãããã§ããã¨ã¯CSRFã«é¢é£ããããªè©±é¡ã ãã Q. ãããããã¯ãã¹ãªãªã¸ã³ãã£ã¦ä½ï¼ ã¹ãã¼ã ããã¹ãããã¼ãã®3ã¤ã®çµã¿åãããä¸è´ãã¦ããå ´åãåä¸ãªãªã¸ã³(same-origin)ãããããä¸ã¤ã§ããã¨ãªãå ´åãã¯ãã¹ãªãªã¸ã³(cross-origin)ã¨è¨ãã¾ããã¤ã¾ããXHRã§ãã¡ã¤ã³ãè¶ ãã¦éä¿¡ãã¦ããå ´åã¯å ¸åçãªã¯ãã¹ãªãªã¸ã³éä¿¡ã¨ãªãã¾ãã Q. ãï¼ XMLHttpReuest ã£ã¦ä»ã®ãã¡ã¤ã³ã«ãªã¯ã¨ã¹ããçºè¡ã§ããªãããã ã
横æµå¸ã®ãµã¤ãã叿°ããã®ææ¡ãã¯ã叿°ããæ§ã ãªæè¦ãéããç®çã§éå¶ããã¦ããï¼åç1ï¼ããªããã¾ãç¯è¡äºåã«ãããç¡å®ã®ä¸è¬å¸æ°ãç¸æ¬¡ãã§èª¤èªé®æãããä¸é£ã®äºä»¶ã§ã¯ããããç¯è¡ç¾å ´ã®1ã¤ã«ãªã£ãã2012å¹´6æã横æµå¸ç«ã®å°å¦æ ¡ã襲æããã¨ããäºåãæ¸ãè¾¼ã¾ããã®ã ã 大ããªå®å®³ã¯ãªãã¯ãã®åé¡ã⦠ç¨ããããã®ã¯ãã¯ãã¹ãµã¤ããªã¯ã¨ã¹ããã©ã¼ã¸ã§ãªã¼ï¼CSRFï¼ã¨ããæ»æææ³ã§ãããç¯äººã¯å¿åæ²ç¤ºæ¿2chãªã©ãä»ãã¦ãä¸è¬å¸æ°ã®è¢«å®³è ãç½ ãµã¤ãã«èªå°ããããã«ä»æããJavaScriptãå®è¡ããããããã¨è¢«å®³è ãç¥ããªããã¡ã«æ¨ªæµå¸ã®ãµã¤ãã«è¥²æäºåãæ¸ãè¾¼ã¾ãããããã被害è ãæ¸ãããã®ããã«è¦ãããããããå ·ä½çã«ã¯ã被害è ã®Webãã©ã¦ã¶ã¼ããã®ã¢ã¯ã»ã¹ã«ãã£ã¦ã被害è PCã®IPã¢ãã¬ã¹ã横æµå¸ãµã¤ãã®ã¢ã¯ã»ã¹å±¥æ´ã«æ®ã£ãã®ã ãææ»å½å±ã¯ãã®IPã¢ãã¬ã¹ããã©ã£ã¦ã被害è
æ¨æ¥ã®æ¥è¨ã§ãDKç¥ãã§ä½¿ããã¦ããèå¼±æ§ãXSSãCSRFãã¨ããåé¡ã«ãªã£ããã©ãããXSSã¨CSRFããã£ã¡ãã«ãªã£ã¦ãã人ãããããã«è¦åããã®ã§ãç°¡åãªæ´çã試ã¿ããã XSSã¨CSRFã«ã¯ä¼¼ãç¹ãããã ã©ã¡ãããã¯ãã¹ãµã¤ããã¨ããè¨èãå é ã«ã¤ã ãªããã¾ãã®ãããªãã¨ãçµæã¨ãã¦ã§ãã ã©ã¡ããåååæ»æã§ãã ããã«å¯¾ãã¦ããã¡ããéãç¹ããããå°éå®¶ããè¦ãã°ãä¼¼ã¦ããä½ããããããå ¨ç¶éããã®ã§ãããã¨ãªãã®ã ããããç¾ã«æ··åãã¦ãã人ãããã®ã ããç´ããããç¹ãããã®ã ããã ç§æãã«ãXSSã¨CSRFã®æ±ºå®çãªéãã¯ã以ä¸ã®ç¹ã§ã¯ãªãã ãããã XSSã¯æ»æã¹ã¯ãªããããã©ã¦ã¶ä¸ã§åãããCSRFã¯ãµã¼ãã¼ä¸ã§åã ãã®ãããXSSã§ã§ããæªããã¨ã¯ãããªãã¡JavaScriptã§ã§ãããã¨ã§ãã£ã¦ãæ»æå¯¾è±¡ã®Cookieãçã¿åºããã¨ãå ¸åä¾ã¨ãªãã䏿¹ãCS
ã©ã³ãã³ã°
ã©ã³ãã³ã°
ã¡ã³ããã³ã¹
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}