æå°éã®å®è¡å¯èœãªè£œåãäœæãããšããã¢ã€ãã¢ã«è§Šçºããã1ãæã§äœãæçšã§å®å šãªãã®ãéçºã§ãããšç¢ºä¿¡ããŠããå Žåã¯ããã®ãããªã補åãã§ã¯ãªããåãªããããã¿ã€ãããªãªãŒã¹ããåã«ããèããŠãã ããã
![](https://habrastorage.org/web/bd7/d86/cad/bd7d86cadc224b5180f866f8191767cc.jpg)
Webãããžã§ã¯ãã®ã»ãã¥ãªãã£ã確ä¿ããããã«è§£æ±ºããå¿ èŠãããã¿ã¹ã¯ã®æ¬¡ã®ãã§ãã¯ãªã¹ãã確èªãããšãéçºã«å«ãŸãããã®ã®å€ããèæ ®ãããŠããªãããšãããããŸãã ã©ããã å°ãªããšããæœåšçãªãŠãŒã¶ãŒã«æ£çŽã«ãªãããããžã§ã¯ãããŸã éçºäžã§ããããšã圌ãããŸã å®å šãªã»ãã¥ãªãã£ã·ã¹ãã ãæã£ãŠããªããããã¿ã€ãã«æ £ããããšãææ¡ããããšãäŒããŸãã
ããŒã¿ããŒã¹
- å¯èœã§ããã°ãæå·åã䜿çšããŠããŠãŒã¶ãŒãèå¥ããæ
å ±ãä¿åããã¢ã¯ã»ã¹ããŒã¯ã³ãé»åã¡ãŒã«ã¢ãã¬ã¹ãæ¯æãã®è©³çŽ°ãªã©ã®æ©å¯ããŒã¿ãä¿åããŸãïŒç¹ã«ããã®ã¢ãããŒãã§ã¯ãå®å
šã«äžèŽããããŒã¿ããŒã¹ã¯ãšãªãæ€çŽ¢ã¬ãã«ã«å¶éããŸãïŒã
- DBMSãä¿åãããããŒã¿ã®è²»çšå¯Ÿå¹æã®é«ãæå·åããµããŒãããŠããå Žåããããæå¹ã«ããŠãã£ã¹ã¯äžã®æ
å ±ãä¿è·ããŸãã ããã«ããã¹ãŠã®ããŒã¿ããŒã¹ããã¯ã¢ãããæå·åãããŠããããšã確èªããŸãã
- ããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããã«ã¯ãæå°éã®ç¹æš©ãæã€ãŠãŒã¶ãŒã¢ã«ãŠã³ãã䜿çšããŸãã ã¹ãŒããŒãŠãŒã¶ãŒã¢ã«ãŠã³ãã䜿çšããã«ãæªäœ¿çšã®ã¢ã«ãŠã³ããšãã¹ã¯ãŒãã匱ãããã¢ã«ãŠã³ãã®ã·ã¹ãã ã確èªããŠãã ããã
- ãã®ãããªäœæ¥ã·ããªãªçšã«èšèšãããããŒã¹ãã¢ã䜿çšããŠãã¢ã«ãŠã³ãããŒã¿ãã·ã¹ãã ã¢ã¯ã»ã¹ããŒã¯ã³ãããã³ãã®ä»ã®ç§å¯æ
å ±ãä¿åããã³è»¢éããŸãã ãã®ãããªããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«ããŒãã³ãŒãããŠä¿åããªãã§ãã ããã
- æºåæžã¿ã®SQLã¯ãšãªã®ã¿ã䜿çšããŠãSQLã€ã³ãžã§ã¯ã·ã§ã³ã«ããæ»æããã·ã¹ãã ãä¿è·ããŸãã ããšãã°ããããžã§ã¯ããNode.jsçšã«èšèšãããŠããå Žåãmysql nmpã©ã€ãã©ãªã䜿çšããªãã§ãã ãããæºåæžã¿ã¯ãšãªããµããŒãããmysql2ã©ã€ãã©ãªãåç
§ããŠãã ããã
éçº
- åãªãªãŒã¹ã®åã«ãã·ã¹ãã ã³ã³ããŒãã³ãã®è匱æ§ã確èªããŠãã ããã ç§ãã¡ã¯ãã¹ãŠã®ã©ã€ãã©ãªãããã±ãŒãžãããã³äœæ¥ç°å¢ã«ã€ããŠè©±ããŠããã çæ³çã«ã¯ããã§ãã¯ã¯CI-CDããã»ã¹ã®äžéšãšããŠèªååãããã¹ãã§ãã
- æ¬çªãµãŒããŒã®ã»ãã¥ãªãã£ã«é¢ããŠããªãããšãã®ãšåã泚æã§ãã®åé¡ãæ±ãããšã«ãããéçºã³ã³ãã¥ãŒã¿ã®ã»ãã¥ãªãã£ã確ä¿ããŠãã ããã éçºã¯ãæœåšçã«å±éºãªå€éšç°å¢ãã·ã³ããéé¢ãããä¿è·ãããç¶æ
ã§å®è¡ããå¿
èŠããããŸãã
èªèšŒ
- bcryptãªã©ã®é©åãªæå·åã¢ã«ãŽãªãºã ã䜿çšããŠããã¹ãŠã®ãã¹ã¯ãŒããããã·ã¥ãããŠããããšã確èªããŠãã ããã èªå·±èšè¿°ã®ããã·ã¥é¢æ°ã䜿çšãããé«å質ã®ã©ã³ãã ããŒã¿ã䜿çšããŠã䜿çšããæå·ã·ã¹ãã ãæ£ããåæåããŸãã
- å®çžŸã®ããå®èšŒæžã¿ã®ã³ã³ããŒãã³ãã䜿çšããŠããã°ã€ã³ãæŽçããå¿ãããã¹ã¯ãŒãã埩å
ãããã¹ã¯ãŒãããªã»ããããŸãã è»èŒªãåçºæããªãã§ãã ããã å®éãç¬ç«ããéçºã§ã¯ãèãããããã¹ãŠã®ã·ããªãªã§ãã®ãããªã¡ã«ããºã ã®æ£ããåäœãä¿èšŒããããšã¯éåžžã«å°é£ã§ãã
- ãŠãŒã¶ãŒãã©ã³ãã ãªæåã»ããã§æ§æãããé·ããã¹ã¯ãŒããäœæããããšã奚å±ãããã·ã³ãã«ã ãè
åšã«ãªããªããã¹ã¯ãŒãèŠä»¶ãå®è£
ããŸãã
- ãã¹ãŠã®ãµãŒãã¹ãããã€ããŒã«å€èŠçŽ èªèšŒã䜿çšããŸãã
DOSæ»æããã®ä¿è·
- API ã«å¯ŸããDOSæ»æããµã€ãã®ããã©ãŒãã³ã¹ã«åœ±é¿ããªãããšã確èªããŠãã ããã å°ãªããšããæãé
ãAPIãã¹ãšãèªèšŒã«é¢é£ä»ããããŠãããããžã§ã¯ãã®éšåã§èŠæ±é »åºŠã®å¶éãå®æœããŸãã ããšãã°ãã¢ã¯ã»ã¹ããŒã¯ã³ãäœæããããã®ãã°ã€ã³ã¢ãžã¥ãŒã«ãšãµãã·ã¹ãã ã«ã€ããŠè©±ãããšãã§ããŸãã ãµãŒããŒãµãã·ã¹ãã ãDOSæ»æããä¿è·ããããã«ãå€éšããã¢ã¯ã»ã¹ã§ãããããžã§ã¯ãã®éšåã§CAPTCHAã䜿çšããããšãæ€èšããŠãã ããã
- ãŠãŒã¶ãŒãã·ã¹ãã ã«éä¿¡ã§ããããŒã¿ã®ãµã€ãºãšæ§é ãããã³å®è¡ããã¯ãšãªã«åŒ·åãªå¶éãèšå®ããŸãã
- CloudFlareãªã©ã®ã°ããŒãã«ãã£ãã·ã¥ãããã·ãµãŒãã¹ã䜿çšãããªã©ãåæ£DOSæ»æã®åœ±é¿ã軜æžããããã«ã·ã¹ãã ã䜿çšããããšãæ€èšããŠãã ããã æ»æäžãããã¯ãããžã§ã¯ãã®åç¶ã«åœ¹ç«ã¡ãéåžžã¯ãµãŒããŒã®è² è·ã軜æžãããµã€ãã®èªã¿èŸŒã¿ãé«éåããŸãã
Webãã©ãã£ãã¯
- æ¿èªã·ã¹ãã ãä¿è·ããã ãã§ãªãããµã€ãå
šäœã«TLSã䜿çšããŸãã èªèšŒãã©ãŒã ãä¿è·ããããã ãã«TLSã䜿çšããªãã§ãã ããã 移è¡äžã«ãstrict-transport-security HTTPããããŒã䜿çšããŠãHTTPSãããã³ã«ã®äœ¿çšã匷å¶ããŸãã
- Cookieã«ã¯httpOnlyå±æ§ãå¿
èŠã§ãããä¿è·ãããŠããå¿
èŠããããå±æ§ã®äžã«ã¯ãã¹ãšãã¡ã€ã³ãã©ã¡ãŒã¿ãŒãååšããŠããå¿
èŠããããŸãã
- å®å
šã§ãªãã€ã³ã©ã€ã³ããã³å®å
šã§ãªãè©äŸ¡ã®èš±å¯ãäžããããšãªããã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒ CSP ïŒã䜿çšããŸãã ãã®ããªã·ãŒã®èšå®ã¯ç°¡åã§ã¯ãããŸããããåŽåãšæéãè²»ãã䟡å€ããããŸãã CDNã³ã³ãã³ãã«ã¯ãµããªãœãŒã¹æŽåæ§ãšã³ãžã³ã䜿çšããŸãã
- ã¯ã©ã€ã¢ã³ãå¿çã§X-Frame-Optionããã³X-XSS-Protection HTTPããããŒã䜿çšããŸãã
- HSTSã¡ã«ããºã ã䜿çšããŠãTLSã®ã¿ã䜿çšããŠã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ã¯ã©ã€ã¢ã³ãã·ã¹ãã ãä¿¡é Œããªãã§ãã ããããµãŒããŒåŽã§HTTPSã䜿çšããŠãã ããã
- ãã¹ãŠã®ãã©ãŒã ã§CSRFããŒã¯ã³ã䜿çšããæ°ããSameSite Cookieå±æ§ã䜿çšããŠCSRFæ»æããä¿è·ããŸãã ææ°ããŒãžã§ã³ã®ãã©ãŠã¶ã§ãµããŒããããŠããŸãã
API
- ç·åœããæ»æã«ãã£ãŠæ€åºã§ãããªãœãŒã¹ããããªãã¯APIã«ãªãããšã確èªããŸãã
- ãŠãŒã¶ãŒã¯ãAPIã䜿çšããåã«å®å
šã«èªèšŒãããé©åã«æ¿èªãããå¿
èŠããããŸãã
æ€èšŒãšããŒã¿å€æ
- ã¯ã©ã€ã¢ã³ãåŽã§ããŠãŒã¶ãŒãå
¥åããããŒã¿ã確èªããŸãã ããã«ããããŠãŒã¶ãŒã¯èªåã®ã¢ã¯ã·ã§ã³ã«ãã°ãã察å¿ã§ããŸãã ãã ãããã®ãã§ãã¯ãä¿¡é Œããªãã§ãã ããã ãµã€ãã®ããŒãžã«è¡šç€ºããåã«ããŠãŒã¶ãŒãå
¥åããå
容ãåžžã«ç¢ºèªããå¿
èŠãªåœ¢åŒã«å€æããŠãã ããã
- ãµãŒããŒäžã®ãã¯ã€ããªã¹ãã䜿çšããŠããŠãŒã¶ãŒããã®ãã¹ãŠã確èªããŸãã ãŠãŒã¶ãŒãå
¥åãããšã³ã³ãŒããããŠããªãããŒã¿ãHTTPãªã¯ãšã¹ããšã¬ã¹ãã³ã¹ã«æ¿å
¥ããªãã§ãã ããã ã©ã®ãããªç¶æ³ã§ãããŠãŒã¶ãŒãSQLã¯ãšãªããã®ä»ã®ãµãŒããŒããžãã¯ã§å
¥åããæœåšçã«å±éºãªããŒã¿ã䜿çšããªãã§ãã ããã
ã¯ã©ãŠãèšå®
- ãã¹ãŠã®ã¯ã©ãŠããµãŒãã¹ã§éããŠããããŒãã®æå°æ°ãããããšã確èªããŸãã æ
å ±é èœã«ããä¿è·ã¯ä¿è·ã§ã¯ãããŸããããéæšæºã®ããŒãã䜿çšãããšãã·ã¹ãã ãæ»æããããšãã人ã
ã®ç掻ãè€éã«ãªããŸãã
- ããŒã¿ããŒã¹ãšãµãŒãã¹ããå€éšããã¢ã¯ã»ã¹ã§ããªãä»®æ³ãã©ã€ããŒãã¯ã©ãŠãïŒVPSãä»®æ³ãã©ã€ããŒãã¯ã©ãŠãïŒã«ä¿æããŸãã ãšã©ãŒãåå ã§å
éšãµãŒãã¹ãå€éšããèŠããå¯èœæ§ããããããAWSã»ãã¥ãªãã£ã°ã«ãŒããèšå®ããVPCéã®ãã¢ãªã³ã°ãèšå®ãããšãã¯éåžžã«æ³šæããŠãã ããã
- ç°ãªãVPCã§è«çãµãŒãã¹ãåé¢ãããµãŒãã¹éã®éä¿¡ã®ããã«ãããã®éã®ãã¢ãªã³ã°ãæ§æããŸãã
- ãã¹ãŠã®ãµãŒãã¹ããæäœéå¿
èŠãªIPã¢ãã¬ã¹ã®ã»ããããã®ããŒã¿ã®ã¿ãåãå
¥ããããã«ããŠãã ããã
- IPã¢ãã¬ã¹ãšããŒãã§çºä¿¡ãã©ãã£ãã¯ãå¶éãã æšçãçµã£ããµã€ããŒæ»æãšãããæ»æã®å¯èœæ§ãæå°éã«æããŸãã
- ã¹ãŒããŒãŠãŒã¶ãŒã¢ã«ãŠã³ãã§ã¯ãªããåžžã«AWS IAMããŒã«ã䜿çšããŸãã
- ã·ã¹ãã ã®ã¡ã³ããã³ã¹ã«é¢ä¿ãã人ããã³éçºè
ã«ã¯ãæå°éã®ã¢ã¯ã»ã¹æš©éã䜿çšããŠãã ããã
- å®æçã«ãã¹ã±ãžã¥ãŒã«ã«åŸã£ãŠããã¹ã¯ãŒããšãã¹ã¯ãŒããå
¥ãæ¿ããŸãã
ã€ã³ãã©
- ããŠã³ã¿ã€ã ãªãã§ãããžã§ã¯ãã®æŽæ°ãå®è¡ã§ããããšã確èªããŠãã ããã ãœãããŠã§ã¢ãè¿
éã«æŽæ°ã§ããå®å
šèªåã·ã¹ãã ãå®è£
ããŸãã
- ã¯ã©ãŠã管çã³ã³ãœãŒã«ã§ã¯ãªããTerraformãªã©ã®ããŒã«ã䜿çšããŠã€ã³ãã©ã¹ãã©ã¯ãã£å
šäœãæ§ç¯ããŸãã ã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒãã¢ãããŒããšããŠå®è£
ããããåªããŸãã ããã«ãããå¿
èŠã«å¿ããŠã1åã®ããŒã¹ãããŒã¯ã§ãã¹ãŠãåäœæã§ããŸãã ã¯ã©ãŠããªãœãŒã¹ãæåã§äœæããããšã¯é¿ããŠãã ããã æ§æãç£æ»ããŸãã
- ãã¹ãŠã®ãµãŒãã¹ã«éäžãã°ããŒã«ã䜿çšããŸãã ãã°ã衚瀺ãŸãã¯ããŠã³ããŒãããããã ãã«SSHçµç±ã§ã·ã¹ãã ã«æ¥ç¶ããå¿
èŠããªãããã«ããã°ã·ã¹ãã ãæ§ç¯ããå¿
èŠããããŸãã
- 蚺æã®å€ç«ããã±ãŒã¹ãé€ããSSHãä»ããŠãµãŒãã¹ã«æ¥ç¶ããªãã§ãã ããã éåžžãSSHãå®æçã«äœ¿çšãããšããããšã¯ãéèŠãªã¿ã¹ã¯ãèªååãããªãããšãæå³ããŸãã
- ã©ã®AWSãµãŒãã¹ã°ã«ââãŒãã§ãããŒã22ãåžžã«éãããŸãŸã«ããªãã§ãã ããã 絶察ã«SSHã¢ã¯ã»ã¹ãå¿
èŠãªå Žåã¯ããã°ã€ã³ãšãã¹ã¯ãŒãã§ã¯ãªããå
¬éããŒèªèšŒã®ã¿ã䜿çšããŠãã ããã
- ããããé©çšããŠæŽæ°ããé·æéæå¹ãªãµãŒããŒã§ã¯ãªãã äžå€ã®ãã¹ããåªå
ããŸã ã ãã®ãããã¯ã«é¢ããæçšãªè³æã次ã«ç€ºããŸãã
- 䟵å
¥æ€ç¥ã·ã¹ãã ã䜿çšããŠãæšçã®ãµã€ããŒæ»æã«ãã被害ãæå°éã«æããŸãã
ã€ã³ãã©éçš
- æªäœ¿çšã®ãµãŒãã¹ãšãµãŒããŒãç¡å¹ã«ããŸãã æãå®å
šãªãµãŒããŒã¯ãé»æºã³ãŒããåŒãåºããããµãŒããŒã§ãã
ã·ã¹ãã ãã¹ã
- ç£æ»ã¢ãŒããã¯ãã£ãšã·ã¹ãã ã®å®è£
ã
- ã·ã¹ãã ã®äŸµå
¥ããã¹ãããŸã-èªåèªèº«ãããã¯ããŸãã ãã ãããã®ãããªãã¹ãã«å€éšã®å°é家ãåå ãããããšã¯æçšã§ãã
ã¹ã¿ããç ä¿®
- ãµã€ããŒãªã¹ã¯ãšã·ã¹ãã ããããã³ã°ããããã«äœ¿çšããããœãŒã·ã£ã«ãšã³ãžãã¢ãªã³ã°ã®æ¹æ³ã«ã€ããŠè©±ãããšã§ãã¹ã¿ããïŒç¹ã«åå¿è
ïŒãèšç·ŽããŸãã
ç·æ¥æ察å¿èšç»
- é²åŸ¡å¯Ÿè±¡ãèšè¿°ããè
åšã¢ãã«ãäœæããŸãã åªå
é äœãä»ããŠãèããããè
åšãšæ»æã®åå è
ããªã¹ãããå¿
èŠããããŸãã
- æ確ãªå±æ©ç®¡çèšç»ãæºåããŸãã ãã€ããããå¿
èŠã«ãªããŸãã
ãŸãšã
ãã®èšäºã®ãã§ãã¯ãªã¹ãã¯å®å šãªãã®ã§ã¯ãããŸããã åé¡ã¯ãåWebãããžã§ã¯ããäžæã§ããããã®äœæè ã ãããã®ãããžã§ã¯ããè ãããã®ãšããããã®è åšã«å¯ŸåŠããæ¹æ³ãæ£ç¢ºã«ç¥ã£ãŠããããšã§ãã ãã ããããŸããŸãªãããžã§ã¯ãã«ã¯å€ãã®å ±éæ©èœããããŸãã ãããã£ãŠãç§ãã¡ã¯èª°ããããã«è¡šç€ºããããªã¹ããèªåã®ãããžã§ã¯ãã«åãããŠèª¿æŽã§ãããšä¿¡ããŠããŸãã
èªãã å 容ã¯ãå®å šãªWebã¢ããªã±ãŒã·ã§ã³ã®éçºã«é¢ããè³æã®èè ãšããŠã®14幎以äžã®çµéšã«åºã¥ããŠããŸãã ãã®çµéšã¯åœŒã«ãšã£ãŠç°¡åãªãã®ã§ã¯ãããŸããã§ããã圌ã®èª¿æ»çµæã¯ãWebãœãªã¥ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãæžå¿µããŠãã人ã ã«ãšã£ãŠæ¥œã«ãªããšç¢ºä¿¡ããŠããŸãã
芪æãªãèªè ïŒ ãã®ãªã¹ãã«äœãè¿œå ããŸããïŒ