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

    【PHP5.3】マジッククオートの設定は、オフにしておきましょう!

    マジッククオートについて最近はPHP7が主流になってき…

  2. PHP

    PHPでは'01'と'1'は同じなの!?

    PHPで、などとすると'01'と'1'は同じってみなされるの?…

  3. 共用サーバ(レンタルサーバ)

    PHP

    さくらインターネット 共用サーバーでエラーログを出力

    さくらインターネットの共用サーバーを借りて頂いている業者さんからの…

  4. WP:WordPress(ワードプレス)

    PHP

    WordPressの記事を特定の文字数で丸める

    ブログのトップページやカテゴリー、アーカイブページなどで、記事の一…

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

    PHP

    【PHP】ucfirst()関数とucwords()関数

    英単語の1文字目を大文字に変換たまたま、英…

  6. PHP

    PHPの驚くべき演算子

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

コメント

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

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

最近の記事

  1. PHP(ピー・エイチ・ピー)
  2. PHP(ピー・エイチ・ピー)
  3. WP:WordPress(ワードプレス)
  4. WP:WordPress(ワードプレス)
  5. WP:WordPress(ワードプレス)
  6. Security(セキュリティ)
  7. WP:WordPress(ワードプレス)
  8. WP:WordPress(ワードプレス)
  9. WP:WordPress(ワードプレス)
  10. アフィリエイト
PAGE TOP