253,400,626,799 19

HTMLをエスケープする関数にhtmlspecialcharsとhtmlentitiesが

HTMLをエスケープする関数にhtmlspecialcharsとhtmlentitiesがあります。この2つの関数の違いをご存知でしょうか。また、意図通りにエスケープ処理を実行する為には第2、第3引数を指定する必要があります。 これらの関数の違いは変換する文字数です。htmlspecialcharsはデフォルトで4つの文字(<、>、&、")をHTML の表現形式に変換します。対して、htmlentitiesはデフォルトで先の4つを含む100個の文字を変換します。より厳密にエスケープしたいなら、 htmlentitiesを使う必要があります。 これらの文字変換テーブルはget_html_translation_table関数で確認して下さい。 しかし、オプションで用意されている引数を指定せずに、これらの関数を使うことは危険です。シングルクォーテーション(')をエスケープしないからです。脆弱性の例として、HTMLタグの属性値をシングルクォーテーションで囲っている場合が考えられます。 <input type='text' name='sample' value='<?php echo htmlentities($_POST['sample'])?>' /> このような場合、XSS脆弱性が存在し $_POST['sample'] = "100' onMouseover='alert(\"XSS\")"; とすることでjavascriptが実行されたり、不正なタグが表示されてしまいます。 これを防ぐにはシングルクォーテーションを変換することが必要ですが、第2引 数にENT_QUOTESを指定することで可能になります。また、第3引数で変換に使用 される文字セットを指定して下さい。つまり、意図通りに出力したいなら htmlentities($str, ENT_QUOTES, mb_internal_encoding()) とする必要があります。ただし、サポートされている文字セットは http://www.phppro.jp/phpmanual/php/function.htmlentities.html の表2に載っているものだけであり、eucJP-win等の場合はEUC-JPで指定する必要があります。 皆さんのコードをもう一度確認してみて下さい。もしかしたら思わぬ所に脆弱性が見つかるかもしれません。

Info

Editor
Updated
Title
HTMLをエスケープする関数にhtmlspecialcharsとhtmlentitiesが
Keywords
Description
Category
Language
Length
2336 Bytes
Characters
953 Chars

Votes

If you want to vote, please Sign in.

Review

Create review

No reviews.