
現在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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのheader("Location:#pos")...
-
フォームで戻った際に入力済み...
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
アンドロイドスマホでのphp ech...
-
Postgresの特定のカラムからス...
-
ここで言う空文字の意味とは?
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php+mysqlでの重複チェックにつ...
-
Flaskでサーバー立ち上げに関して
-
POSTの項目に追加
-
重複を防ぐ記述について教えて...
-
複数条件での検索について教え...
-
アップロードファイル名の文字化け
-
サブフォルダ内の全てのテキス...
-
php、sqlite3にデーター追加で...
-
phpで変数を使ってcopyできない
-
配列について教えて下さい。
-
$_SESSIONに渡した後はそのまま...
-
phpで掲示板を作りたい
-
JSONデータ登録について
-
$_REQUESTの意味を教えて下さい
-
空文字
-
PHP等を用いて在庫数を表示・管...
-
Fortranでのファイル名操作につ...
-
VBA で、スペースを含むファイ...
-
header()関数について
-
PHPでParse errorについて
おすすめ情報