• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームから入力される値のチェックについて)

フォームから入力される値のチェックについて

このQ&Aのポイント
  • フォームから入力される値を安全にチェックする方法について質問です。
  • 具体的には、郵便番号の入力値のチェックや文字コードのチェックについて心配しています。
  • これらのチェック方法について、より安全性を高めるための方法や注意点などがあれば教えてください。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>POSTのデータが改ざんされたとしても数値以外は受け付けないので、 >これだけで「入力された値は安全」と考えて良いのでしょうか。 想定された文字列しか受け付けないので安全な可能性が高いです。 (とくに数値しかとっていないので) いわゆるホワイトリスト方式ですね。 ご提示の方式ですと特殊な文字がインジェクションにひっかかる 可能性があるので必ずしも安心とはいえません。 一つ一つの文字を精査すればホワイトリスト方式の方が安全ですが、 適切なエスケープ処理をするブラックリスト方式でも、 やりようはあると思います。

misoshio
質問者

お礼

ご回答ありがとうございます。 この質問をしたあとに自分でもいろいろ調べてみたのですが、 やっぱり入力値のチェックだけではムリがあるみたいですね。 入力するデータやその後の扱い方によって変わると思いますが、 比較的簡単かつオールマイティに使える技(関数)はないものなのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • t140
  • ベストアンサー率39% (59/150)
回答No.2

末尾$は改行にもマッチするのでpregで正しくマッチさせるにはD修飾子使うことが推奨されています。 if (preg_match("/^\d{7}$/", "0300403\n")) echo "match(1)!"; if (preg_match("/^\d{7}$/D", "0300403\n")) echo "match(2)!";

misoshio
質問者

お礼

ご回答ありがとうございます。 私のサンプルではまだ不十分だったんですね。 数字だけだと思って甘く見ていました。 とても勉強になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • URLの内容チェックがうまくいきません

    $_POST['url']に何らかの値が格納されている場合のみ、正規表現で値をチェックしたいのですが、現在のソースでは$_POST['url']が空の場合も処理が正規表現に移ってしまい、結果エラーが出てしまいます。 if ( isset($_POST['url']) && preg_match('/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/', $_POST['url']) && mb_strlen($_POST['url']) <= 100){ 【データベース登録処理】 }else{ echo "エラー:入力内容が正しくありません"; } issetあたりが怪しいとは思うのですが、!emptyでも駄目でした。 他に何か書き方がありましたらご教授ください。

    • ベストアンサー
    • PHP
  • 入力されたテキストからメールアドレス抽出するPHP

    入力されたテキストからメールアドレス抽出するPHPを作りたいのですが、下記の記述では抽出ができません。 どのように文を変えたら抽出できるでしょうか?よろしくお願い致します。 <form action="mail2.php" method="post"> <input type="text" name="text" size="100" value=""/><br /> <input type="submit" name="text" value="テキストからアドレスを抜き出す" /> </form> <?php if( preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",$text,$match)); echo "アドレス-> {$match[0]}\n"; print $arr_str[0];  ?>

    • ベストアンサー
    • PHP
  • preg_match関数で4-16桁の英数字かどうかをチェックしたい

    こんにちは☆ PHPでログインIDの入力フォームを作成していて、ユーザーの入力した文字が半角英数字のみで4桁以上16桁以内であるかどうかをpreg_match関数を用いてパターンチェックしたいのですが、うまくいきません。 (全角かな等が入っていてもtrueが返ってしまう。) どなたかご存知でしたらご指摘下さいm(_ _)m -------------------現在までの状況------------------------------- $login_id = $_POST["POSTされたユーザ入力"]; $login_id = mb_convert_kana($login_id, "a"); if (!preg_match("/[a-zA-Z0-9]{4,16}/", $login_id)) { echo "エラーメッセージ"; } ----------------------------------------------------------------

    • ベストアンサー
    • PHP
  • 正規表現で入力チェックするには。

    正規表現を使用して入力チェックをしようと考えていますが特殊記号文字がうまくいきません。 [0-9a-zA-Z]で英数字はチェックする事ができたんで下記の特殊文字を指定するとエラーになってしまい困っています。 「!"#$%&'()=~|`{+*}<>?_-^\@[;:],./」 ロジックは以下のように記述しています。 Pattern p = Pattern.compile("[0-9a-zA-Z!\"#$%&'()=~|`{+*}<>?_-^\\@[;:],./]"); Matcher m = p.matcher("文字列"); if(m.matches() == true){   System.out.println("1"); } else{   System.out.println("2"); } ※「\」と「"」はエスケープしています。 下記のエラーメッセージが表示されてなんとなくですが正規表現でエラーになっているのはわかるんですが・・・ Illegal character range near index 32 [0-9a-zA-Z!"#$%&'()=~|`{+*}<>?_-^\@[;:],./]                       ^ 申し訳ありませんがアドバイスいただけませんでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • phpで日付チェックをしたいのですが。

    日付に使う数値がどうかチェックする処理をしたいのですが、 数値と/かどうかチェックする処理を以下の様に作ったのですが、 上手くいきません。 ご教授お願いします。 if (preg_match("/^[0-9/]+$/",$str)) {  return true; }

    • ベストアンサー
    • PHP
  • 値のチェック

    phpとjavascriptを使用して現在ページのサイトURLを フォームに入力したメールアドレスに送信するというプログラムを作成しています。 送信にphpを使用し、値のチェックをjavascriptで行っています。 問題なくできたのですが、 さらにもうひとつ別のURLを送信するフォームをつけたいのです。 問題なくURLの送信はできたんですが、、、 bの方だけアラートがでてくれません。 phpの処理まで不正の値のまますすんでしまい、internalservererrorとなってしまいます。 <html> <head> <script type="text/javascript"> <!-- function cheak(cate) { var error = 1; var acc; var adr; switch(cate){ case "a": acc = document.form1.account.value; adr = document.form1.adress.value; break; case "b": acc = document.form2.accout2.value; adr = document.form2.adress2.value; break; } var mailad = acc + "@" + adr;//メール //チェック if (mailad.match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/) ){ error = 0; }else{ error = 1; } //エラーならアラート表示 if (error==1) { alert("正しくありません"); return false; } else {return true;} } --> </script> </head> <body> <?php //aのフォームだったら if($_POST['mail'] != ""){ $fileName = $_SERVER['PHP_SELF'];//ファイル名 $account = htmlspecialchars($_POST['account']);//アカウント $adress = $_POST['adress'];//アドレス $sendUrl = "http://www/".$_SERVER['PHP_SELF']; $sendUrl = preg_replace("/\/[0-9]+\/[0-9]+/","",$sendUrl); } //bのフォームだったら elseif($_POST['mail2'] != ""){ $fileName = $_SERVER['PHP_SELF'];//ファイル名 $account = htmlspecialchars($_POST['account2']);//アカウント $adress = $_POST['adress2'];//アドレス $sendUrl = "http://"; } else{} //メールアドレスに値があれば if(isset($account) and isset($adress)) { $phase = true; } else { $phase = false; } //アカウント、アドレスが正しければ if($phase) { $mail = $account."@".$adress; mail ($mail, "", $sendUrl); echo '<script type="text/javascript">window.alert("送信")</script>'; } else{} ?> <!-- a --> <form id="form1" name="form1" method="post" action="<?php echo $fileName ?>" onsubmit="return cheak('a')"> <input type="text" name="account" id="account" />@ <select name="adress" id="adress"> <option>Please choose</option> <option value="ne.jp">ne.jp</option> </select> <input name="mail" type="submit" id="mail" value="send" /> </form> <!-- b --> <form id="form2" name="form2" method="post" action="<?php echo $fileName ?>" onsubmit="return cheak('b')"> <input type="text" name="account2" id="account2" />@ <select name="adress2" id="adress2"> <option>Please choose</option> <option value="ne.jp">ne.jp</option> </select> <input name="mail2" type="submit" id="mail2" value="send" /> </form> </body> </html> どちらも正しいメールアカウント(マルチバイトや空白でない)を入力しアドレスを正しく選択すると それぞれ、どちも送信だけはうまくいくんですが、、、 どちらもエラーダイアログが出るようにしたいのですが、 どうしたらよいでしょうか。 ちなみに、諸事情によりformエリアはサンプルのように 2つになります。まとめることはできませんのでご了承ください。 もしかしたら、phpの記述ミスかもしれないので、 もしそうである場合はスレを変えますでの、 ご指摘いただければと思います。

  • フォームの入力チェックについて

    下記のプログラムで、チェックボックスや、ラジオボタンの 入力チェックを行うと、 値自体は、$_POST['radio_check']にて取得できるのですが、Javascriptコンソールにて objElm has no propertiesと 出てしまいます。 外部ファイル部分 function requiredRadioCheck(objElm,strErr) { flag=false; for(i=0;i<objElm.length;i++){ if(objElm[i].checked){flag=true;} } if(!flag){ return strErr + "が入力されていません。 \r"; }else{ return ""; } } html部分 function chk(){ strErr=""; strErr+=requiredCheck(strErr+=requiredRadioCheck(document.Form.radio_check.value,"ラジオボタン"); strErr+=numberTypeCheck if(strErr==""){ return true; }else{ window.alert(strErr); return false; } }

  • JavaScriptでフォームの入力項目をリアルタイムでチェックする「

    JavaScriptでフォームの入力項目をリアルタイムでチェックする「jQuery Form Validators」で全角カナや半角数字のみを入力できるようにすることはできますか? (参考にしたサイト) http://www.skuare.net/test/jvalidator.html フォームの入力項目で以下の入力のチェックが出来るようにしたいのですが可能でしょうか? ・全角カタカナのみで姓名の入力 ・半角数字のみで電話番号の入力 メールアドレスは、inputタグのサンプルにある部分をコピーすることで出来ました。 --------------------------------------- validExpress="[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?" --------------------------------------- validExpress=""の""の中を指定すれば良いのだと思うのですがどうしても解決せず、この場で質問させて頂いてます。 どうかご教授の程、宜しくお願い致します。

  • PHPでの正規表現

    PHPでの正規表現に関する質問です。 function makeAk($value){ return preg_replace("/(?<![一-龠+ぁ-ん+ァ-ヴ+a-zA-Z0-9'\"#@=:;])@([一-龠+ぁ-ん+ァ-ヴ+a-zA-Z0-9_]{1,15})/u", "@<a href=\"mypage.php/\\1\">\\1</a>", $value); } 上記のコードでmypage.phpに\\1ではなく、パラメーター(?id=$post['id']のような)を振りたいのですが、 どうしたらうまくいきますでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • フォームに入力された値をリンクに入れる

    ↓フォーム  ↓リンク |222-0033| 郵便番号検索 フォームに入力された値を郵便番号検索で http://www.benri.com/zipcode/ などのページに接続したいと考えております。 元のフォームに住所を入力するまでは不要です。 検索されたURLを検索してくれるだけでOKです。 リンクは <A HREF ="http://www.benri.com/zipcode/zipcode.cgi?keyword=???" onMouseOver="searchfor" > としました。 ???の部分をどうやって取得していいか困っています。 一応、マウスオーバーすると、下のjavascriptが起動するように作ってみました。 keyword = document.KIHON.post.value; が、ダメでした。 どうやったらリンクにフォームの値を渡すことができるでしょうか?

印刷のかすれ
このQ&Aのポイント
  • 印刷時に色が薄くなる問題について質問です。
  • インクが半分残っているにも関わらず、印刷結果がかすれてしまいます。
  • EPSON社製品の印刷機を使用している際に、インクの残量に関わらず、印刷が薄くなってしまう現象が発生します。
回答を見る

専門家に質問してみよう