Webエンジニア・ソーシャルメディアの研究をしている雄大です。
HTMLエンコード、htmlspecialcharsを使っても、クロスサイトスクリプティングが発生するサンプルプログラムを書いてみました。
documentwrite.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <spanclass="tag"><?php</span> <spanclass="variable">$input</span>=<spanclass="str">"<script>alert('XSS')</script>"</span>; <spanclass="variable">$input</span>=htmlspecialchars(<spanclass="variable">$input</span>); <spanclass="keyword">echo</span><spanclass="variable">$input</span>; <spanclass="tag">?></span> <spanclass="tag"><html></span> <spanclass="tag"><head></span> <spanclass="tag"></head></span> <spanclass="tag"><body></span> <spanclass="tag"><input<spanclass="attr">type=</span><spanclass="value">"text"</span><spanclass="attr">id=</span><spanclass="value">"foo"</span><spanclass="attr">value=</span><spanclass="value">"<?php echo $input;?>"</span></span>"> <span class="tag"><script <span class="attr">type=</span><span class="value">"text/javascript"</span> <span class="attr">language=</span><span class="value">"javascript"</span>></span> document.write('<span class="tag"><b></span>'+document.getElementById('foo').value+'<span class="tag"></b></span>'); <span class="tag"></script></span> <span class="tag"></body></span> <span class="tag"></html></span> |
これをブラウザで出力するとこんな感じになります。
1 2 3 4 5 6 7 8 9 10 | &lt;script&gt;alert('XSS')&lt;/script&gt;<spanclass="tag"><html></span> <spanclass="tag"><head></span> <spanclass="tag"></head></span> <spanclass="tag"><body></span> <spanclass="tag"><input<spanclass="attr">type=</span><spanclass="value">"text"</span><spanclass="attr">id=</span><spanclass="value">"foo"</span><spanclass="attr">value=</span><spanclass="value">"&lt;script&gt;alert('XSS')&lt;/script&gt;"</span>></span> <spanclass="tag"><script<spanclass="attr">type=</span><spanclass="value">"text/javascript"</span><spanclass="attr">language=</span><spanclass="value">"javascript"</span>></span> document.write('<span class="tag"><b></span>'+document.getElementById('foo').value+'<span class="tag"></b></span>'); <spanclass="tag"></script></span> <spanclass="tag"></body></span> <spanclass="tag"></html></span> |
しっかりとhtmlエンコードされているのがわかります。
しかし、残念な事にアラートが…!!
コメント