Security(セキュリティ)

PHP

PHP脆弱性対応:フォームのセキュリティー対策 入力値の妥当性チェック

前回のXSS脆弱性対策(セキュリティー対策)の続きで、

今回は入力値の妥当性チェックについてです。

 

しっかりとチェック処理を入れておかないと、

スパムメールの踏み台にされたり、フィッシング詐欺メールの送信処理に使われてしまいます。

 

それで、

妥当性チェックといっても、

チェックすることは多すぎて大変です!!

 

例えば、

メールアドレスが正しく入力されているかをチェックする場合には、

/*
*説明:メールアドレスの形式をチェックする
* 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;

 }

}

という関数を作成して、

if(!checkMailAddress($mail)){
 echo "メールアドレスを半角英数字で正しく入力してください。";
}

とすればチェックできます。

 

ただし、

メールアドレスのチェックは本来はこれだけでは不十分で、

完全なチェックコードを書くのは相当な作業量になるようです。

 

また、

電話番号だと、

if(preg_match("/^0\d{8,9}$/", $tel_num)){

 return true;

}else{

 return false;

}

とします。

 

これは、

「0」から始まり、9桁もしくは10桁で入力されていることを確認しています。

 

これは

数字のみ入力を許可する場合の処理で、

例えば「-」付きの電話番号をチェックする場合には、

if(preg_match("/\d{2,4}-\d{2,4}-\d{4}/", $number)){

 return true;

}else{

 return false;

}

となります。

これはファックス番号もほとんど同じです。

 

因みに携帯電話だと、

/*
*説明:携帯番号の形式をチェックする
* IN :$number チェック対象となる携帯番号
* OUT:エラーが無ければ「true」、エラーがあれば「false」を返す
*/
function checkKeitaiNumber($number = ""){

 if(preg_match("/^0(7|8|9)0\d{8}$/", $number)){

  return true;

 }else{

  return false;

 }

}

で対応可能だと思います。

 

その他にも、

名前やふりがなに全角以外の文字が入っていないかは、

/*
*説明:全角文字のみかをチェックする
* 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」の値は、ブラウザ上で簡単に改変できます。

 

取り敢えず、

妥当性チェックといってもチェックすることは山程あり、

結構面倒な作業ではあります。

WordPress短期学習プログラム

関連記事

  1. PHP(ピー・エイチ・ピー)

    PHP

    【PHP】金額をカンマで3桁区切りにフォーマット

    PHPを使って、数字(金額)を3桁区切りにフォーマットする方法…

  2. PHP(ピー・エイチ・ピー)

    PHP

    【PHP】extract()関数は使うな危険!?

    配列を勝手に変数に変換してくれるextract()という便利な関数があ…

  3. PHP(ピー・エイチ・ピー)

    PHP

    【PHP】APIを使って天気情報を表示させてみました。

    ページの端っこの方に天気を表示させる機会があったので、その方法を記…

  4. PHP(ピー・エイチ・ピー)

    PHP

    【PHP7】「preg_replace」じゃなく「preg_replace_callback」を使い…

    PHP5.6からPHP7.0へのバージョンアップでエラー…

  5. PHP(ピー・エイチ・ピー)

    PHP

    【PHP】ini_setで設定できる内容のまとめ

    ini_setで設定できる内容PHPのini_se…

  6. PHP(ピー・エイチ・ピー)

    PHP

    PHPの驚くべき演算子

    先日、PHPだとif('01' == '1')がtrueになってしまう…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. SEO関連タグ
  2. SEO関連タグ
  3. レンタルサーバー(共用サーバー)
  4. システム開発用のアイキャッチ
  5. システム開発用のアイキャッチ
  6. ドメイン 利用制限
  7. WP:WordPress(ワードプレス)
  8. システム開発用のアイキャッチ
  9. システム開発用のアイキャッチ
  10. Theme(テーマ)の選択
PAGE TOP