7-8その他のセキュリティTips469 ヌルバイト攻撃の手法と対策を理解する
Level2
Pointバイナリセーフな関数を代替利用する
「468」で紹介したヌルバイト攻撃が適用可能なのは、ファイル名を指定する関数のみではありません。
ヌルバイトが混在した場合、開発者が意図しない動作をする可能性がある関数としては、例えば以下のようなものがあります。
ereg()、ereg_replace()、eregi()、eregi_replace()、split()、spliti()、include()、include_once()、require()、require_once()、fopen()、file_get_contents()、readfile()、basename()
対策としては、バイナリセーフな関数を代替として利用することです。バイナリセーフな関数とは、ヌル文字をファイルの終端とみなさないなど、特殊な制御文字があっても動作を変えない関数のことです。
例としては、preg_match()、fread()、fgetcsv()、file()などです。
Hint
C言語の世界では一般的にヌルバイトが文字列の終端を表すため、上記の関数の動作は見方によっては誤動作ではありません。
この記事は会員限定です。会員登録をすると続きをお読みいただけます。
ログイン / 新規登録