(誤)これらの値を使用する場合は、値を検証し、出力の際は適切にエスケープ処理する必要があります。ファイル名の操作での注意ファイル名の指定で「../」と入力すると、1つ上の階層のディレクトリを意味します。外部からファイル名を指定する場合、このような文字列をチェックしないと、想定外の場所にあるファイルにアクセスされる危険性があります。ディレクトリをさかのぼって想定外のファイルを読み書きすることを「ディレクトリトラバーサル」と言います。外部からファイル名を指定する(外部からの入力値をファイル名の生成に使用する)ような設計をしないことが一番の対策です。文を使って他のファイルを読み込むことがありますが、これらの引数にユーザーからの入力値が含まれる場合もセキュリティ上の問題が生じることがあります。文の引数にしてしまうと攻撃者は自由にコードをサーバー上で実行できてしまうためとても危険です。文の引数に指定するようなコードを書かないことです。文字エンコードのチェックブラウザなど外部から入力されたデータは、文字エンコードが正しいかをチェックする必要があります。文字エンコードが違っていたり壊れていると、想定外の動作になる場合があり脆弱性になる可能性があります。対策としては入力時のバリデーション処理で,すべての文字列に対してエンコーディングが正しいかチェックします。関数で簡単に文字エンコードをチェックすることができます。$encoding)この関数は文字列が、指定したエンコーディングで有効なものかどうかを調べます。パラメータ$var(string):調べる文字列(バイトストリーム)$encoding(string):期待するエンコーディング。以下はエンコーディングをチェックする関数の例です。使ってメッセージを表示して現在のプログラムを終了します。関数を使って文字種と文字数もチェックする例です。第2パラメータには、文字種と文字数をチェックする正規表現パターンを渡します。"\\A[[:^cntrl:]]{0,20}\\z");参考:PHP以外では既にあたり前になりつつある文字エンコーディングバリデーション文字エンコーディングとセキュリティ(2)不正な値のチェック入力されたデータ(値)に不正な値が含まれていないかをチェックする必要があります。文字の直前に、「\」(バックスラッシュ)が追加されます。追加された「\」を安全に取り除くことができます。返すようになりました。バイト(文字コードの値が0の文字)を使いプログラムを誤作動させる攻撃です。バイトが含まれている入力は不正な入力になるので、検知したら処理を直ちに中止するようにします。バイト攻撃対策の関数の例です。die('不正な入力です。character)とは、文字コードの規格で定義される文字のうちディスプレイ、プリンター、通信装置などに対して、特別な動作(制御)をさせるために使う文字です。通常の入力では、改行やタブ以外の制御文字は許可しないように検証します。すると、改行(\r\n)とタブ(\t)を含む制御文字以外の文字となります。バイナリーデータには制御文字が含まれる可能性があるので、その場合はチェックの対象から外します。以下は、magic_quotes_gpcが「on」の場合の対策、NULLバイト攻撃対策、改行やタブ以外の制御文字、文字エンコードのチェックをまとめて行う関数の例です。die('不正な入力です。die('不正な入力です。die('不正な入力です。制御文字は使用できません。配列に適用しています。その全ての要素を含む配列を返します。渡される配列の数に一致している必要があります。その全ての要素を含む配列を返します。以下は、配列が渡された場合でも、それらの値に対してエスケープ処理を行う関数の例です。}}以下は前述の関数を使用したサンプルです。die('不正な入力です。die('不正な入力です。die('文字数は100文字以下でお願いします。制御文字は使用できません。文を使って読み込むようにします。die('不正な入力です。die('不正な入力です。die('文字数は100文字以下でお願いします。制御文字は使用できません。die('不正なアクセスの可能性があります。