現在PHPでフォームの作成を行っているのですが、参考にしているページなどを見ていて疑問に思うことがありましたので、お詳しい方アドバイスを頂けますと幸いです。
といいますのが、入力フォームの情報を保持して使いたいときにSESSIONなるものが利用できるとのことで試しているのですが、参考サイトにはいろいろな書き方があるようなのですが、例えば確認ページで受け取る際に…。
$_SESSION["name"] = $_POST["name"];
としていたり、
$post = $_POST["name"];
として、作った変数に入れてから$post["name"];と使ったりしています。
そこで質問なのですが、$_SESSION["name"]で受け取れば、その後、サンクスページや自動返信文でこのSESSIONを利用して色々と情報が使えまわせると思うのですが、なぜ、わざわざ$postといった感じで一旦普通の変数に入れるのでしょうか?変数に入れてしまうとこの情報は今後遷移後のページで使えず、また再度取得しなければならないかと思うのですが…。
何だか変な質問で、私自信もうまく質問の内容がお伝え出来ないのですが…。
変数に入れ直した方が安全とかあるのですか?また、ずっと他のページに遷移後も$_SESSION["name"]のままで使い続けても問題無いのでしょうか?
お詳しい方、宜しくお願いいたします。
No.3ベストアンサー
- 回答日時:
> すみません、こちらの検証は具体的にはどのような対応になりますか?
システムおよび業務で必要な検証です。
値が入っていない、想定を超える桁数や文字種の値が入っている、システムで許容されていない値が入っている(DBに登録されているものしか許可しない)、など。
別な方への再質問に
> $_SESSION["name"] = htmlspecialchars($_POST["name"]);
とありますが、これはおかしいですよ。
htmlspecialchars()は画面に表示する際に、値のエスケープを行うための命令です。
渡ってきた値に対して行うものではないため、セッション変数にhtmlspecialchars()を噛ませた値を保持するのは不自然です。
何度も有難うございます。
>>値が入っていない、想定を超える桁数や文字種の値が入っている、システムで許容されていない値が入っている(DBに登録されているものしか許可しない)、など。
なるほどです、受け取る際には想像以上に色々と確認を行わなければならないのですね。
>>htmlspecialchars()は画面に表示する際に、値のエスケープを行うための命令です。
そうなのですね、こちらは表示する際のみに使用いたします。
なんだか思った以上に行わなければならないことが多々あるようで驚きです。
まだまだ見えないところだらけですが、こちらのアドバイスを参考に進めてみたいと思います。
有難うございます!!
No.2
- 回答日時:
「$_POST」をそのまま使うのはまずいです。
サンプルプログラムであればいいのでしょうが、実用ではサニタイズする必要があります。
変数に入れ直すのは、サニタイズしていない値を使用していないことを直観的にわかるようにするためという意味もあります。
有難うございます!
なるほど、いずれも安全面で使わない方が良いという事ですね。
ちなみに、以下の様に使うのもNGなのでしょうか?
$_SESSION["name"] = htmlspecialchars($_POST["name"]);
安易な考えですが、綺麗にしてからSESSIONに入れてみたのですが…。
やはり普通に一度は変数に入れ直す方が良いのでしょうか?
No.1
- 回答日時:
セッション変数にはシステムとして問題がないデータのみが格納されるべきです。
$_POST、$_GETなどから渡される値は、必ずしもシステムとして正常な値とは限りません。
様々なツールやブラウザの機能によって不正な値を送ることも可能です。
そのため、$_POST、$_GETの値は正常性の検証が必要になります。
よって、$_SESSION["name"] = $_POST["name"] は一見問題ないような制御に思えるかもしれませんが、正しい制御とは言えません。
$name = $_POST["name"]
// ここで $name の値検証を行う。NGなら$_SESSIONには格納しない。
$_SESSION["name"] = $name;
一度セッション変数に格納された値を取り出す分には、上記が正しく制御されているなら、正常な値が担保されているので、何も気にすることなく取り出せばいいです。
有難うございます!
// ここで $name の値検証を行う。NGなら$_SESSIONには格納しない。
すみません、こちらの検証は具体的にはどのような対応になりますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
PHP5でRSS1.0のネームスペース...
-
VBA で、スペースを含むファイ...
-
PHP ボタンが押されたら処理を...
-
連動させたいセレクトボックス...
-
フォーム送信後の更新ボタンで...
-
ボタンをクリックでPHP文を実行
-
HTMLのリンクをクリックするこ...
-
PHPでクリックするたびに変数を...
-
エラーを元の画面に表示させるには
-
POSTデータのNAME属性をVALUEに...
-
画面が更新されてもチェックボ...
-
フォームボタンを押すたびに数...
-
検索時の選択内容を保持する方法
-
PHP 検索PG
-
同じページでフォームデータを...
-
テキストリンクをPOST送信したい
-
HTMLで前の画面に戻る時、入力...
-
複数チェックボックスの内容の...
-
$_POST['hoge']のデータをフラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
VBA で、スペースを含むファイ...
-
POSTの項目に追加
-
phpで変数を使ってcopyできない
-
PHPからHTMLへの変数の受け...
-
foreachがうまく動かない
-
ファイル名を変更してアップロ...
-
MySQL,PHPのリロードによる二重...
-
$_SESSIONに渡した後はそのまま...
-
引数の参照について
-
ログイン パスワード変更のプ...
-
Smartyのforeachのnameに変数を...
-
formでのチェックボックスのnam...
-
プログラムの流れの確認で・・
-
アップロードファイル名の文字化け
-
検索結果の出力先を違うフレー...
-
PHP等を用いて在庫数を表示・管...
-
テキストボックスの値を取得したい
-
mySQLのデータを多次元配列に格...
-
if文のなかで
おすすめ情報