バイナリセーフとNULLバイト攻撃
■バイナリセーフとは
文字列にヌル文字が含まれていても、正しく処理できる関数のこと。
ヌル文字が含まれていても、ヌル文字以降全てを終端として扱わない。
■ヌル文字?ヌルバイト?とは
制御文字のうち、終端を意味する「\0」「\x00」「%00」のこと。
値 0 のバイト。
■NULLバイト攻撃とは
PHPの大半の関数がヌル文字を文字として認識する一方、C言語の関数を直接呼び出すような一部関数ではヌル文字を文字列の終端文字として認識することがある。
$_POSTや$_GETなどでリクエストを受け取った際、その文字列の中に、ヌル文字が入っていると、その制御文字以降に悪意あるコードが入っていても、終端を意味する制御文字で処理してしまう。これを利用したインジェクション攻撃。
参考:https://hnw.hatenablog.com/entry/20121028
■制御文字とは
画面に表示する文字ではなく、コンピュータさん(の周辺機器)に特定の指示を出すための文字のこと
改行とか。
※NULLもNULも同じものを指す。