• ベストアンサー

以下のセキュリティ対策は大丈夫でしょうか?

引数からファイルを指定して読み込むPHPです。 <? $read = $_GET['file']; if(ctype_alnum($read)==false || is_null($read)){ die("error"); } include("/public_html/php/".$read.".php"); ?> この場合、一応ctype関数で半角英数字のみ受け付けているので、おおよそ大丈夫だと思うのですが、nullバイト攻撃などがあると聞き、ちょっと心配です。 ご指摘やアドバイスなどあればよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

nullバイトアタックは、バイナリセーフな関数であれば問題ないと思います。 バイナリセーフでない関数を使うと抜ける例が以下です。 $data = $_GET['file']; if(ereg("^[0-9a-zA-Z]+$", $data)){ echo "OK"; }else{ echo "NG"; } このスクリプトが記載されているファイルに対して 「?file=abcdef0834%00___________」 などとパラメータをつけてアクセスすると、「OK」と表示されてしまいます。 この「%00」がnull文字をurlencodeしたものになります。 自身で作成されたスクリプトに上記のnull文字を挿入したものでいくつかパターンを作ってみると良いと思います。 また、下記URLが参考になると思います。 http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html 「PHP と Web アプリケーションのセキュリティについてのメモ」

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

file名に、"このphpのファイル名.php?file=このphpのファイル名.php " とセットしてGET送信を試してみたらどうなりますか?

Intel_404
質問者

補足

/public_html/php/内の このphpのファイル名.php が呼び出されます。 ちなみにこのスクリプトは別のフォルダーにあります。