JavaScriptインジェクション① 従æ¥åž‹è„†å¼±æ€§å¯¾å¿œ(エスケープ処ç†ç­‰)

ã¯ã˜ã‚ã«

クロスサイトスクリプティング(XSS)ã¯ä¸»ã«JavaScriptを利用ã—ã¦è¡Œã‚れる。
HTML5ã€JavaScriptåŠã³ãã®é–¢é€£æŠ€è¡“ã®æ™®åŠã«ä¼´ã£ã¦è„†å¼±æ€§ã¨å¯¾å¿œç­–ã¯åºƒãŒã‚‹ä¸€æ–¹ã ãŒã€
ã¾ãšã¯å¾“æ¥ã‹ã‚‰ã®å¯¾ç­–

エスケープ処ç†

SQLインジェクションã¨åŒæ§˜ã€‚
攻撃者ã¯ãƒ†ã‚­ã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ç­‰ã®å…¥åŠ›æ¬„ã«JavaScriptコードを挿入ã—ã¦ãる。
JavaScriptを無効化ã™ã‚‹æ§˜ã«æ–‡å­—ã‚’ç½®æ›ã™ã‚‹å‡¦ç†ã‚’æ–½ã™äº‹ãŒå¯¾ç­–。
攻撃例
使‰€ï¼š
ã¨ã„ã†ãƒ†ã‚­ã‚¹ãƒˆãƒœãƒƒã‚¯ã‚¹ã«å¯¾ã—ã¦ã€
使‰€ï¼š
ã¨ã„ã†é¢¨ã«å…¥åŠ›ã—ã¦æ”»æ’ƒã—ã¦ãる。
※サイトã«ã‚ˆã£ã¦ã¯ã“ã®JavaScriptãŒå‹•ã„ã¦ã—ã¾ã†ã€‚
JavaScriptã¯å¿…ãšã€Œ<ã€ã€Œ>ã€ã®æ–‡å­—ã§ã‚³ãƒ¼ãƒ‰ã‚’囲む必è¦ãŒã‚ã‚‹ã®ã§ã€
例:<script>JavaScriptコード</script>

具体的ã«ã¯å…¥åŠ›ã•れãŸã€Œ<ã€ã€Œ>ã€ç­‰ã®æ–‡å­—を強制的ã«ã€Œ&lt;ã€ã€Œ&gt;ã€ç­‰ã®æ–‡å­—コードã«ç½®æ›ã™ã‚‹å‡¦ç†ã‚’「エスケープ処ç†ã€ã¨ã„ã†ã€‚
※サーãƒãƒ¼å´ã§å‡¦ç†ã™ã‚‹éš›ã«ã¯ã€Œ<ã€ã€Œ>ã€â‡’「&lt;ã€ã€Œ&gt;ã€ã«å¤‰æ›ã•れã¦JavaScriptã¯å‹•作ã—ãªã„。
ãã‚‚ãもクライアントサイドã§ã“ã®æ–‡å­—ã®å…¥åŠ›ã‚’åˆ¶é™ã™ã‚‹æ§˜ãªå‡¦ç†ã‚’æ–½ã™ã¨ãªãŠè‰¯ã„。

「<ã€ã€Œ>ã€ã®ä»–ã«ã‚‚ã€ã€Œ"ã€ã€Œ'ã€ã€Œ&ã€ç­‰ã‚‚htmlã«ãŠã„ã¦ã¯ç‰¹åˆ¥ãªæ„味をæŒã¤ç‚ºã€
ãれãžã‚Œä»¥ä¸‹ã®æ§˜ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†ã‚’行ã†ã€‚
< → &lt;
> → &gt;
" → &quot;
' → &#39;
& → &amp;

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インジェクションを無効化ã—ã¦ã„る。
JavaScriptインジェクション

URL

<a href="javascript:~ ">
<iframe src="data:text/html;~ ">
本æ¥ã€URLãŒè¨­å®šã•れる~ã®éƒ¨åˆ†ã«JavaScriptã®ã‚³ãƒ¼ãƒ‰ãŒåŸ‹ã‚è¾¼ã¾ã‚Œã‚‹ã¨ã€
URLã«ã‚¸ãƒ£ãƒ³ãƒ—ã›ãšã«åŸ‹ã‚è¾¼ã¾ã‚ŒãŸã‚³ãƒ¼ãƒ‰ãŒå®Ÿè¡Œã•れã¦ã—ã¾ã†ç‚ºã€
URLã®å‹•çš„ç”Ÿæˆæ™‚ã¯http,httpsé™å®šã¨ã™ã‚‹ã€‚

Follow me!

å‰ã®è¨˜äº‹

CSS display属性

次ã®è¨˜äº‹

CSS opacity属性