前回のXSS脆弱性対策(セキュリティー対策)の続きで、
今回は入力値の妥当性チェックについてです。
しっかりとチェック処理を入れておかないと、
スパムメールの踏み台にされたり、フィッシング詐欺メールの送信処理に使われてしまいます。
それで、
妥当性チェックといっても、
チェックすることは多すぎて大変です!!
例えば、
メールアドレスが正しく入力されているかをチェックする場合には、
<?php /* *説明:メールアドレスの形式をチェックする * IN :$mail チェック対象となるメールアドレス * OUT:エラーが無ければ「true」、エラーがあれば「false」を返す */ function checkMailAddress($mail = ""){ if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $mail)){ return true; }else{ return false; } } ?>
という関数を作成して、
<?php if(!checkMailAddress($mail)){ echo "メールアドレスを半角英数字で正しく入力してください。"; } ?>
とすればチェックできます。
ただし、
メールアドレスのチェックは本来はこれだけでは不十分で、
完全なチェックコードを書くのは相当な作業量になるようです。
また、
電話番号だと、
<?php if(preg_match("/^0\d{8,9}$/", $tel_num)){ return true; }else{ return false; } ?>
とします。
これは、
「0」から始まり、9桁もしくは10桁で入力されていることを確認しています。
これは
数字のみ入力を許可する場合の処理で、
例えば「-」付きの電話番号をチェックする場合には、
<?php if(preg_match("/\d{2,4}-\d{2,4}-\d{4}/", $number)){ return true; }else{ return false; } ?>
となります。
これはファックス番号もほとんど同じです。
因みに携帯電話だと、
<?php /* *説明:携帯番号の形式をチェックする * IN :$number チェック対象となる携帯番号 * OUT:エラーが無ければ「true」、エラーがあれば「false」を返す */ function checkKeitaiNumber($number = ""){ if(preg_match("/^0(7|8|9)0\d{8}$/", $number)){ return true; }else{ return false; } } ?>
で対応可能だと思います。
その他にも、
名前やふりがなに全角以外の文字が入っていないかは、
<?php /* *説明:全角文字のみかをチェックする * IN :$string チェック対象となる文字列 * OUT:エラーが無ければ「true」、エラーがあれば「false」を返す */ function checkHalf($string){ if(mb_convert_kana($string, "AK", "文字コード") != $string){ return false; }else{ return true; } } ?>
という関数で対応しています。
mb_convert_kanaでの変換前の文字列と変換後の文字列とで差異が出れば、
全角以外が混ざっていると判定しています。
その他にも、
例えば、性別を問うラジオボタンを設けた場合、
性別は「男」か「女」だけなので、
それ以外の値が送られてきていないか?
また、
郵便番号は「3桁-4桁」で入力されているか?
数字のみのを入力する項目は半角数字で入力されているか?
※is_numeric()関数でのチェックだとまずいらしいので、正規表現でチェックして下さい。
年齢であれば、3桁以内の半角英数のみで入力されているか?
※「preg_match("/^\d{1,3}$/", $age)」とすればOK!!
入力された日付けは妥当か?
※日付けはcheckdate()関数を使えば便利ですね!!
などのチェックが必要です。
それと、
テキストボックスの項目には必ず「maxlength="xx"」を設定しておき、
設定したmaxlength以上の文字数のテキストが送られてきていないか?
のチェックも必要です。
※「maxlength」の値は、ブラウザ上で簡単に改変できます。
取り敢えず、
妥当性チェックといってもチェックすることは山程あり、
結構面倒な作業ではあります。
PHP脆弱性対応PHP脆弱性対応 クリックジャッキング攻撃への対応
PHP脆弱性対応PHP脆弱性対応:XSS(クロスサイトスクリプティング)
PHP脆弱性対応PHP クッキー(Cookie)にセキュア属性(secure属性)を付与
この記事へのコメントはありません。