JavaScriptインジェクション①従æ¥åž‹è„†å¼±æ€§å¯¾å¿œ(エスケープ処ç†ç‰)
ã¯ã˜ã‚ã«
クãƒã‚¹ã‚µã‚¤ãƒˆã‚¹ã‚¯ãƒªãƒ—ティング(XSS)ã¯ä¸»ã«JavaScriptを利用ã—ã¦è¡Œã‚れる。
HTML5ã€JavaScriptåŠã³ãã®é–¢é€£æŠ€è¡“ã®æ™®åŠã«ä¼´ã£ã¦è„†å¼±æ€§ã¨å¯¾å¿œç–ã¯åºƒãŒã‚‹ä¸€æ–¹ã ãŒã€
ã¾ãšã¯å¾“æ¥ã‹ã‚‰ã®å¯¾ç–
エスケープ処ç†
SQLインジェクションã¨åŒæ§˜ã€‚
攻撃者ã¯ãƒ†ã‚ストボックスç‰ã®å…¥åŠ›æ¬„ã«JavaScriptコードを挿入ã—ã¦ãる。
JavaScriptを無効化ã™ã‚‹æ§˜ã«æ–‡å—ã‚’ç½®æ›ã™ã‚‹å‡¦ç†ã‚’æ–½ã™äº‹ãŒå¯¾ç–。
攻撃例
使‰€ï¼š
ã¨ã„ã†ãƒ†ã‚ストボックスã«å¯¾ã—ã¦ã€
使‰€ï¼š
ã¨ã„ã†é¢¨ã«å…¥åŠ›ã—ã¦æ”»æ’ƒã—ã¦ãる。
※サイトã«ã‚ˆã£ã¦ã¯ã“ã®JavaScriptãŒå‹•ã„ã¦ã—ã¾ã†ã€‚
JavaScriptã¯å¿…ãšã€Œ<ã€ã€Œ>ã€ã®æ–‡å—ã§ã‚³ãƒ¼ãƒ‰ã‚’囲む必è¦ãŒã‚ã‚‹ã®ã§ã€
例:<script>JavaScriptコード</script>
具体的ã«ã¯å…¥åŠ›ã•れãŸã€Œ<ã€ã€Œ>ã€ç‰ã®æ–‡å—を強制的ã«ã€Œ<ã€ã€Œ>ã€ç‰ã®æ–‡å—コードã«ç½®æ›ã™ã‚‹å‡¦ç†ã‚’「エスケープ処ç†ã€ã¨ã„ã†ã€‚
※サーãƒãƒ¼å´ã§å‡¦ç†ã™ã‚‹éš›ã«ã¯ã€Œ<ã€ã€Œ>ã€â‡’「<ã€ã€Œ>ã€ã«å¤‰æ›ã•れã¦JavaScriptã¯å‹•作ã—ãªã„。
ãã‚‚ãもクライアントサイドã§ã“ã®æ–‡å—ã®å…¥åŠ›ã‚’åˆ¶é™ã™ã‚‹æ§˜ãªå‡¦ç†ã‚’æ–½ã™ã¨ãªãŠè‰¯ã„。
「<ã€ã€Œ>ã€ã®ä»–ã«ã‚‚ã€ã€Œ"ã€ã€Œ'ã€ã€Œ&ã€ç‰ã‚‚htmlã«ãŠã„ã¦ã¯ç‰¹åˆ¥ãªæ„味をæŒã¤ç‚ºã€
ãれãžã‚Œä»¥ä¸‹ã®æ§˜ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã‚’行ã†ã€‚
< → <
> → >
" → "
' → '
& → &
DOM生æˆ
ユーザーãŒå…¥åŠ›ã—ãŸå€¤ç‰ã‚’ç”»é¢ã«è¡¨ç¤ºã—ãŸã‚Šã™ã‚‹ç‚ºã«å‹•çš„ã«htmlを生æˆã™ã‚‹éš›ã€
やり方(æ–‡å—列ã«ã‚ˆã‚‹html指定)ã«ã‚ˆã£ã¦ã¯è„†å¼±æ€§ã¨ãªã‚‹ã€‚
①通常ã®è¡¨ç¤º
<script type="text/javascript">
  var normal = 'aaa';
  document.write("<input type='text' value='" + normal + "' /> ");
  (1)document.write("<input type='text' />")ã«ã‚ˆã‚ŠTextBoxãŒå‹•çš„(サイト表示時)ã«ç”Ÿæˆã•れる。
  (2)ãã®éš›ã€å¤‰æ•°ï¼šnormalã®å†…容をTextBoxã«è¡¨ç¤ºã™ã‚‹(value=normal)
</script>
â‘¡JavaScriptインジェクションæˆåŠŸä¾‹
マウスオーãƒãƒ¼ã‚¤ãƒ™ãƒ³ãƒˆã§alert(1)ãŒå®Ÿè¡Œã•れる。
<script type="text/javascript">
  var XSS = "' onmouseover='alert(1);";
  document.write("<input type='text' value='" + XSS + "' /> ");
</script>
â‘¢JavaScriptインジェクション防æ¢ä¾‹
<form id="myForm">
</form>
<script type="text/javascript">
  var myForm = document.getElementById('myForm');
  var element = document.createElement('input');
  element.setAttribute('type','text');
  element.setAttribute('value',XSS);
  myForm.appendChild(element);
</script>
※setAttributeã€appendChildを使用ã™ã‚‹äº‹ã§JavaScriptインジェクションを無効化ã—ã¦ã„る。
URL
<a href="javascript:~ ">
<iframe src="data:text/html;~ ">
本æ¥ã€URLãŒè¨å®šã•れる~ã®éƒ¨åˆ†ã«JavaScriptã®ã‚³ãƒ¼ãƒ‰ãŒåŸ‹ã‚è¾¼ã¾ã‚Œã‚‹ã¨ã€
URLã«ã‚¸ãƒ£ãƒ³ãƒ—ã›ãšã«åŸ‹ã‚è¾¼ã¾ã‚ŒãŸã‚³ãƒ¼ãƒ‰ãŒå®Ÿè¡Œã•れã¦ã—ã¾ã†ç‚ºã€
URLã®å‹•çš„ç”Ÿæˆæ™‚ã¯http,httpsé™å®šã¨ã™ã‚‹ã€‚