ã¯ããã«
â»æ¬ã¡ãŒã«ã¯ãã¿ã€ã ãºã«ãŒäŒå¡æ§ã®ãã¡ãæ¬äººç¢ºèªæžé¡æ å ±ã®æŒããã確èªãããæ¹ãžãéãããŠãããŸãã
ã¡ãŒã«å²äžãããã¯ã©ã¹ã«æãããåé æã®éããã¯ããå人æ å ±ããããŸããã
ãããå 蚱蚌ç»åãããããŸããïŒã¢ãŠããŒïŒïŒã
ãšããããšã§ä»åã¯ãå¶ç¶ã«ã被害è ãšãªã£ãŠããŸã£ãä»åã®éšåã«ã€ããŠãå€åŽããèŠããå®è£ ã¿ãããªãã®ããã£ãã®ã§ããããŸã§ããããªãäžå人ã®ãç®å°ãã€ç¹çްãªåå èå¯ãè¡ã£ãŠããããšæããŸãã
ãããŸã§ãããã¯Qiitaãªã®ã§ãã»ãã¥ã¢ããã°ã©ãã³ã°çãªèŠçŽ ãå ãã€ã€ãã£ãŠãããŸãã
ç®æ¬¡
- å ¬è¡šããã660äžä»¶ãšããŸã åãããªãåå
- å ¬éHTMLã«æ®ã£ãŠããSeasarã®çè·¡
- ã©ã®ãããªå®è£ ãªãå人æ å ±ãååŸãããã®ã
- äŸµå ¥åŸã®å€§éååŸãæžããèšèš
1. å ¬è¡šããã660äžä»¶ãšããŸã åãããªãåå
2026幎9æ28æ¥ãããŒã¯24ã¯ã¿ã€ã ãºã«ãŒWebã·ã¹ãã ãžã®äžæ£ã¢ã¯ã»ã¹ã«ãããçŽ660äžä»¶ã®ã¢ã«ãŠã³ãæ å ±ã第äžè ã«ååŸããããšçºè¡šããŸããã察象ã¯ã¿ã€ã ãºã«ãŒãšã¿ã€ã ãºããžãã¹ãµãŒãã¹ã®äŒå¡ã«å ããéäŒæžã¿ã®å©çšè ããã¿ã€ã ãºã«ãŒãžã®å ¥äŒãå®äºããŠããªãç³èŸŒè ã«ãåã³ãŸãã
æŒããããæ å ±ã«ã¯ãæ°åãäœæãçå¹Žææ¥ãé»è©±çªå·ãã¡ãŒã«ã¢ãã¬ã¹ãé転å èš±æ å ±ãæ¬äººç¢ºèªæžé¡æ å ±ããã¹ã¯ãŒãã飿ºãµãŒãã¹IDãªã©ãæããããŠãããé ç®ã¯å¯Ÿè±¡è ã«ãã£ãŠç°ãªãã¿ããã§ãã
ç§ã®å Žåã¯åé ã®ã¡ãŒã«ã§ãå
蚱蚌ç»åãããçŸäœæç¢ºèªæžé¡ç»åããšãã£ãã®ã§ãæµåºããæ
å ±ã«å¿ããŠããããã¡ãŒã«æ¬æãç°ãªããã§ãããã
äžããç°¡åãªã¿ã€ã ã©ã€ã³ã§ãã
| å ¬è¡šæ¥ | 確èªãããå 容 |
|---|---|
| 9æ25æ¥ã®ç¬¬1å ± | 忥9æ07åã«äžæ£ã¢ã¯ã»ã¹ãæ€ç¥ãå人æ å ±æŒããã®å¯èœæ§ãå ¬è¡š |
| 9æ28æ¥ã®ç¬¬2å ± | çŽ660äžä»¶ã®ã¢ã«ãŠã³ãæ å ±ã®ååŸã確èªã9æ26æ¥7æ25åãŸã§ã«çµè·¯ã𿻿å ãšã®éä¿¡ã鮿ãããšèª¬æ |
| 9æ29æ¥ã®ç¬¬3å ± | æ¬äººç¢ºèªæžé¡ãæŒããããã¢ã«ãŠã³ãã¯çŽ160äžä»¶ãšç¢ºèªã忥ãã察象äŒå¡ãžã®åå¥ã¡ãŒã«æ¡å ãéå§ |
9æ29æ¥ã®ç¬¬3å ±ã§ã¯ãæ¬äººç¢ºèªæžé¡ãæŒããããã¢ã«ãŠã³ãæ°ã¯çŽ160äžä»¶ãšå ¬è¡šãããŠããŸããæŒããã確èªãããæ å ±ã«ã¯ãé転å 蚱蚌ç»åãçŸäœæç¢ºèªæžé¡ç»åã®ã»ããåŠçãã©ã³ã®åŠç蚌ç»åãå®¶æãã©ã³ã®å®¶æç¢ºèªæžé¡ç»åãæããããŠããŸãã忥ãã察象ã®äŒå¡ãžã®ã¡ãŒã«æ¡å ãéå§ããåã ã®æŒãããã詳现ã¯2é±éçšåºŠãç®åŠã«æ¹ããŠæ¡å ãããšã®ããšã§ãã
以éã¯ãå ¬éHTMLãšå ¬åŒã®æè¡è³æãåºçºç¹ã«ããèå¯ããã£ãŠãããŸããæ³å®ããæ§æãäžåã¯äžç¢ºå®ã§ããã確å®ã«ã¿ã€ã ãºã®å®è£ äžã®æ¬ é¥ã§ããããšãããã®ã§ã¯ãªãã®ã§ãäºæ¿ãã ããã
2. å ¬éHTMLã«æ®ã£ãŠããSeasarã®çè·¡
2-1. 確èªã§ããã®ã¯ãTeedaé¢é£ã®JavaScript
9æ29æ¥ã«ååŸããã¿ã€ã ãºã«ãŒã®ãããããŒãžã®HTMLã«ã¯ã次ã®JavaScriptãžã®åç
§ããããŸãããsrc屿§ãæç²ããŠããŸãã
<script src="/view/teedaExtension/org/seasar/teeda/ajax/js/ajax.js?20201217"></script>
åç
§å
ã®ãã¡ã€ã«ãååŸã§ããå
éšã«ã¯Kumu.AjaxãšexecuteTeedaAjaxãšããèå¥åããããŸãããå°ãªããšãããããããŒãžãTeedaé¢é£ã®JavaScriptãåç
§ãããµã€ãããã®ãã¡ã€ã«ãé
ä¿¡ããŠããããšã¯ç¢ºèªã§ããŸãã
Teedaã¯ãSeasarãããžã§ã¯ãã®JavaåããŠã§ãã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯ã§ããäžå¿å ¬åŒããã¥ã¡ã³ãã§ã¯ãç»é¢ãæ±ãTeeda CoreãHTMLãã³ãã¬ãŒããæ±ãTeeda Extensionãéåæéä¿¡ãæ±ãTeeda Ajaxãããã¿ããã§ãããšã¯ããTeeda Ajaxã¯ä»ã®ã¢ãžã¥ãŒã«ããç¬ç«ããŠå©çšã§ããã®ã§ããã®JavaScriptã ãã§ãµãŒããŒå šäœã®æ¡çšæè¡ãé転è£å€ã¿ããçªãã€ããããšã¯ã§ããŸããïŒãããïŒïŒã
2-2. ãµããŒãçµäºããèããä¿å®ã®è²¬ä»»
Seasarãããžã§ã¯ãã¯ãäŸå€ãšããŠåæãã補åãé€ãã2016幎9æ26æ¥ã«ã¡ã³ããã³ã¹ãšãµããŒããçµäºãããšåç¥ããŠããŸãããã¡ãããTeedaãSeasar2ãSeasarãããžã§ã¯ãã«å«ãŸããŠãŸãã
å ¬åŒãµããŒããçµäºããŠãäžå¿ã³ãŒãã¯åãç¶ããŸãããæ°ããå ¬åŒãããã¯ç¡ããªããŸããçãããçµéšããããããããŸããããç¶ç¶å©çšãç¶ããå Žåã¯ãèåŒ±æ§æ å ±ã確èªããŠç¬èªä¿®æ£ãå ããŠäŸåã©ã€ãã©ãªã®æŽæ°ããªã©éçšä¿å®äœæ¥ãããèèŠã«ãªããŸãããŸã倧æµã¯ç§»è¡ãèãããšã¯æããŸãã
ç§ãäžãšã³ãžãã¢ãšããŠæ°ã«ãªãã®ã¯ããã¬ãŒã ã¯ãŒã¯ã®æ°æ§ãããå人æ å ±ãæ±ãåŠçãç¶ç¶ããŠç¹æ€ã»ä¿®æ£ã§ããäœå¶ããã£ãã®ããã§ããããäžã«ã¯ã¬ã¬ã·ãŒã·ã¹ãã ãéçšããŠããçŸå Žã¯äŸç¶å±±ã®ããã«ãããŸãããã
äžå©çšè ãšããŠãé¡ããããã®ã¯ãå€ããã¬ãŒã ã¯ãŒã¯ã¯æ°ãããã®ã«ç§»è¡ããŠãã ããããšããããšã§ãã
é©åãªä¿®æ£ãããŠãããŠããããè匱æ§ãçªãããããšãã説ãããããæå±ã§ããŸãã
3. ã©ã®ãããªå®è£ ãªãå人æ å ±ãååŸãããã®ã
äŒå¡ãµã€ãã®äžè¬çãªæ§æãšããŠããã©ãŠã¶ãŒããã®èŠæ±ããŠã§ãã¢ããªãåãåããäŒå¡æ å ±ãæ¬äººç¢ºèªç»åã®ä¿ç®¡å ãžåãåãããå®è£ ãæ³å®ããŠã¿ãŸããç»åãããŒã¿ããŒã¹å ã«ããããå¥ã®ä¿ç®¡å ã«ããããæªå ¬è¡šãªã®ã§ãããã§ã¯åœ¹å²ã ããèããŸãã
以äžã¯ã»ãã¥ã¢ããã°ã©ãã³ã°ã®èãæ¹ãšããŠè¶ åºæ¬çãªãã®ãæ··ãã£ãŠããŸãããåå ãšããŠèããããªãããªãã®ã§äžå¿ãããŠãããŸãã
3-1. éåæéä¿¡ã®åŠçã«ããæ¯åã®èªå¯ãå¿ èŠ
Teeda Ajaxã¯JavaScriptåŽã®ã³ãŒã«ããã¯é¢æ°ã®åœåèŠçŽã«ãã£ãŠããµãŒããŒåŽã®ã³ã³ããŒãã³ããšã¡ãœããã解決ããä»çµã¿ããããŸãããã©ãŠã¶ãŒãããµãŒããŒã®åŠçãåŒã³åºãæ§æã§ã¯ããã®å ¥å£ã«ãèªèšŒãšèªå¯ãå®è£ ããªããã°ãªããŸããã
èªèšŒã¯å©çšè ã誰ãã確ãããåŠçãèªå¯ã¯ãã®å©çšè ã«å¯Ÿè±¡ããŒã¿ãžã®æäœãèš±ããã倿ããåŠçã§ãããã°ã€ã³æžã¿ïŒèªèšŒæžã¿ïŒã§ããèªå¯ããªããã°ä»äººã®å 蚱蚌ç»åãååŸã§ããŸããã
äŸãã°ãç»é¢ã®åæè¡šç€ºã§ã¯ãã°ã€ã³ã確èªããŠããŠããç»åååŸãæ€çŽ¢ãæ åœããéåæéä¿¡ã®åŠçã«èªèšŒãèªå¯ã®ç¢ºèªããªããã°ãããããæ å ±ãååŸãããå¯èœæ§ããããŸããç»é¢äžã®ãã¿ã³ãé ãã ãã§ã¯ããµãŒããŒãçŽæ¥åãåãèŠæ±ãæåŠã§ããŸãããèªå¯ã¯ç»é¢é·ç§»ã«äŸåããããããŒã¿ãè¿ãåŠçããšã«é©çšããŸãã
ãã®å¯Ÿçã¯Teedaã«éããå¿ èŠã§ãOWASPïŒãªã¯ã¹ãïŒããéåæéä¿¡ãå«ããã¹ãŠã®èŠæ±ã§æš©éã確èªããèš±å¯æ¡ä»¶ãæºãããªãã¢ã¯ã»ã¹ãååãšããŠæåŠããæ¹éã瀺ããŠããŸããããã¯ãšã³ãžãã¢ãããã®åºæ¬äžã®åºæ¬ã§ãã
3-2. å ¥åãSQLã®åœä»€ãšããŠè§£éãããªã
å¥ã®æ³å®ã¯ãæ€çŽ¢æ¡ä»¶ãäŒå¡çªå·ãæååã§SQLãžé£çµããå®è£ ã§ããå€éšå ¥åãSQLã®æ§æãžå ¥ã蟌ããšãæå³ããæ€çŽ¢æ¡ä»¶ãå€ããããSQLã€ã³ãžã§ã¯ã·ã§ã³ãæç«ããå ŽåããããŸãã
ããã§ã¯å®ãµãŒãã¹æ³å®ã¯è²ã
ãšãŸããã®ã§ãPythonãšSQLiteã§ååŸæ¡ä»¶ã®äŸã瀺ãããšã«ããŸããlogin_member_idã¯ãµãŒããŒãèªèšŒæžã¿ã»ãã·ã§ã³ãã確å®ããæ¬äººIDã§ããããã©ãŠã¶ãŒããæå®ãããäŒå¡IDãæž¡ããŠã¯ãããŸããã
def get_document_key(conn, *, login_member_id, document_id):
# æžé¡IDã®åãšç¯å²ããµãŒããŒåŽã§æ€èšŒããŸã
if type(document_id) is not int or document_id <= 0:
raise ValueError("invalid document id")
# æ¬äººIDãæ€çŽ¢æ¡ä»¶ã«å«ããå€ã¯SQLã®æ§æãžé£çµããŸãã
row = conn.execute(
"SELECT storage_key FROM identity_documents "
"WHERE id = ? AND member_id = ?",
(document_id, login_member_id),
).fetchone()
if row is None:
raise PermissionError("document not accessible")
return row[0]
?ãžã®å€ã®æçžã¯å
¥åãSQLã®åœä»€ãšããŠæ±ãããªãããã®å¯Ÿçã§ãmember_id = ?ã¯æ¬äººãææããæžé¡ã ãã«ååŸãéãæ¡ä»¶ã§ããäž¡æ¹ãå¿
èŠã§ãSQLã€ã³ãžã§ã¯ã·ã§ã³ãé²ãã ã ãã§ã¯ä»äººã®ããŒã¿ã®ååŸãŸã§æ¢ããããŸããã
âããããã®ãåºãç¥ãããæ¹ã¯ãã®èšäºãã©ããã
3-3. ãµãŒããŒã®åŠçèªäœãä¹ã£åãããçµè·¯
äŸåã©ã€ãã©ãªãå®è¡ç°å¢ã®è匱æ§ã管ççšã®èªèšŒæ å ±ã®çªåãèšå®äžåããäŸµå ¥ãããçµè·¯ãèããããŸããæ»æè ããµãŒããŒäžã§ä»»æã®åŠçãå®è¡ã§ããã°ãç»é¢çšã®èªå¯ãçµç±ãããã¢ããªãæã€æš©éã§ä¿åããŒã¿ãžã¢ã¯ã»ã¹ããããããããããŸãã
ãã ããä»åã®ä»¶ã§ä»»æã®ã³ãŒãå®è¡ãæç«ãããã¯å ¬è¡šãããŠãªãã®ã§äžæã§ããç¶å ±ã§ãåºãŠãããäžæã§ãã
4. äŸµå ¥åŸã®å€§éååŸãæžããèšèš
çŽ660äžä»¶ãšããèŠæš¡ãèãããšãäŸµå ¥çµè·¯ãžã®å¯Ÿçã«å ããäŸµå ¥åŸã«ååŸã§ããæ å ±éãæ€èšããããšããã§ãããã£ãšããäžã€ã®ããŒã¿ããŒã¹ã«å šæ å ±ãä¿åãããŠããã®ããäžåã®æäœã§ååŸãããã®ããšãã£ãå éšæ§é ãååŸã®æé ã¯æå®ã§ããªããã®ã®ãã§ããã
äžè¬çãªå¯ŸçãšããŠãäŒå¡ç»é¢çšã®åŠçã«ã¯å¿ èŠãªé ç®ã ããååŸããæš©éãäžããå šäŒå¡ã®åºåãæ¬äººç¢ºèªæžé¡ã®äžæ¬ååŸãèš±å¯ããªãèšèšãèããããŸããããŒã¿ããŒã¹ã®é²èЧå°çšæš©éã§ããå šäŒå¡ã®å人æ å ±ãååŸã§ãããªããæŒãã察çã®èгç¹ã§ã¯åŒ·ãããŸãã
æ¬äººç¢ºèªç»åã¯éåžžã®äŒå¡æ å ±ããç¬ç«ããä¿ç®¡ã»ååŸæ©èœã«ããæ¥åäžå¿ èŠãªå©çšè ãšåŠçã ãã«ã¢ã¯ã»ã¹ãèš±å¯ããæ¹æ³ããããŸããä¿ç®¡å Žæã ãã倿ŽããŠãè¶³ãããå®éã«äœ¿çšããèªèšŒæ å ±ãååŸã§ããç¯å²ãè¿ãé ç®ãŸã§å¶éããŸãã
倧éã®ååŸã«æ°ã¥ãããããååŸä»¶æ°ãéä¿¡éãæ®æ®µãšç°ãªãæäœãç£èŠå¯Ÿè±¡ã«ããŸããäžåã®å¿çä»¶æ°ã«äžéããã£ãŠããç¹°ãè¿ãååŸã§ããã°æ å ±ã¯èç©ããããããå©çšè ãåŠçããšã®ååŸéãšé »åºŠã確èªããŸããæ€ç¥åŸã«æš©éã忢ããæé ãŸã§çšæããŠããããã§ããã
ä»åã¯éäŒæžã¿ã®å©çšè ãå ¥äŒæªå®äºã®ç³èŸŒè ã察象ã«å«ãŸããŠããããã§ããåœããåã§ãããä¿åãç¶ããæ å ±ã¯æŒããæã«åœ±é¿ãåãã察象ã«ããªããŸããä¿åã®å¿ èŠæ§ãšæéãæ±ºããäžèŠã«ãªã£ãæ å ±ãåé€ããåŠçã仿§ãžå«ããã¹ãã§ãã
ãã¹ã¯ãŒãã«ã€ããŠã第2å ±ã¯åŸ©å ã§ããªã圢åŒã§ä¿ç®¡ããŠãããšèª¬æããŠããŸãããå ·äœçãªæ¹åŒãèšå®ã¯å ¬è¡šãããŠããŸãããäžè¬è«ãšããŠãããã·ã¥å€ãæµåºããå Žåãæ»æè ã¯åè£ã®ãã¹ã¯ãŒãããèšç®ããå€ãšã®ç §åã詊ããããããã¹ã¯ãŒãå°çšã®èšç®ã³ã¹ãã®é«ãæ¹åŒãšãå©çšè ããšã®ãœã«ãïŒã¬ã€ã³ããŒããŒãã«é²æ¢çãšããŠïŒã䜿çšããå¿ èŠããããŸããã©ã®åŒ·åºŠã®ããã·ã¥ã䜿ã£ãŠãããã«ãã£ãŠå€§å話ãå€ãã£ãŠããŸãã
ä¿åããŒã¿ã®æå·åãå¿ èŠã§ãããã¢ããªã埩å·ããããŒã¿ãååŸã§ããå Žåãã¢ããªãçµç±ããæŒããã¯èµ·ããåŸãŸããå¿ èŠãªããŒã¿ã ããååŸãããæš©éèšèšã¯ãæå·åããåŸãæ®ã課é¡ã§ãã
ãããã«
ãããŸã§ãä»ãåãããã ãããããšãããããŸãã
ãããŸã§äœæãšãååãæµåºããäºæ¡ã¯ããã©ãå
蚱蚌ãç»åãå«ããŠæµåºããã®ã¯äžã
èããªãïŒãšãããèããããªãïŒã§ãããã
ã§ããããŸã§æžããŠãããŠäœã§ãããå®ã¯ããŸããŸäžæšæ¥å
èš±æŽæ°ããããŸããŠãæ°ãã«åçãªã©æ®åœ±ããå
蚱蚌ã¯ã¿ã€ã ãºã«ç»é²ããŠããªãã£ãã®ã§ãç§ã®å Žåäžå¹žäžã®å¹žãã¿ãããªããšã«ã¯ãªã£ãŠãŸãã
ãšã¯ããæŽæ°ã§å€ãããªãæµãã¡ããããªãæ
å ±ãæµããŠããã®ã§ãè²ã
ãšæ°ãã€ããŠããããŸãããã
ã§ã¯ãŸãããäŒãããŸãããã
åèãªã³ã¯
å ¬åŒçºè¡šãšå ¬éHTML
- ã¿ã€ã ãºã«ãŒWebãµã€ããžã®äžæ£ã¢ã¯ã»ã¹ã«é¢ãã第1å ± - ã¿ã€ã ãºã«ãŒ
- ã¿ã€ã ãºã«ãŒWebã·ã¹ãã ãžã®äžæ£ã¢ã¯ã»ã¹ã«é¢ãã第2å ± - ããŒã¯24
- ã¿ã€ã ãºã«ãŒWebã·ã¹ãã ãžã®äžæ£ã¢ã¯ã»ã¹ã«é¢ãã第3å ± - ããŒã¯24
- ãããããŒãž - ã¿ã€ã ãºã«ãŒ
æ¡çšæè¡ã®èå¯ã«äœ¿çšããå ¬åŒè³æ
- Teedaã®æŠèŠ - Seasarãããžã§ã¯ã
- Teeda Ajaxã®ä»æ§ - Seasarãããžã§ã¯ã
- ãµããŒãçµäºã®åç¥ - Seasarãããžã§ã¯ã



