
https://qiita.com/Naughty1029/items/08b0ddeb8054 …
で紹介されている。register.phpで$_POST['token']と$_SESSION['token']が一致しなくて、エラーになるのですが、そもそもpostとsessionのtokenがどうすれば一致し、なぜ一致していないのかよく分かりません。サイトのコーディングは他の方は機能していますか?新規登録なので、一致しなくていいものなのでは?とも思えるのですが、アドバイスやコーディングの間違え等があるならば、教えていただきたいです。よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
スマホからの都合上、Postはポスト、Sessionはセッションとします。
セッション変数は、ユーザーがあなたのWebサーバーにアクセスした時に作成され、ブラウザを閉じるなどの何らかの操作をするまで変数の値が保持される特別な変数です。
ポスト変数はユーザーがPostでsubmitした情報がPHPの処理により代入される変数です。
どちらもある操作によって変数の値が決まります。
session_startをした時から入っているように見えたのなら、あなたがそのウェブサイトにアクセスし、別の処理により、セッション変数への代入が行われたので、その内容をセッション変数が保持しているに過ぎません。
非技術者にとって学習難易度が高いかもしれませんが、Laravelのようなフレームワークを使えばここら辺のセキュリティ機能を簡単に実装出来ます(でも、環境構築とか、やり方分からないか。。。)
No.4
- 回答日時:
ご質問の処理は、安全なウェブサイトを作るうえで必要な
CSRF 脆弱性の対策です。
安全なウェブサイトの作り方 - 1.6 CSRF
https://www.ipa.go.jp/security/vuln/websecurity/ …
根本的解決 6-(i)-a 処理を実行するページをPOSTメソッドでアクセスするようにし、その「hiddenパラメータ」に秘密情報が挿入されるよう、前のページを自動生成して、実行ページではその値が正しい場合のみ処理を実行する。
一致するとは、
「入力画面を表示して、フォーム内容を記載し、投稿ボタンを押す」
という想定どおりの流れを経た POST 送信である、ということです。
一致しないとは、
想定通りの流れでない不正な POST 送信ということです。
具体的な例を二つほど上げます。
例1) ブラウザ操作ミス
ブラウザ履歴をたどり、登録後画面を再表示してしまった
→ 表示するために再度 POST 送信を送った
→ POST 内に含まれる token が古いままなので SESSION と一致しない
→ エラー発生し登録失敗
例2) 悪意ある攻撃
攻撃者の用意した罠サイト or メールで、ボタンを押してしまった
→ 異常な登録を行う POST 送信がウェブサイトに送られた
→ POST 内に含まれる token が無い or 適当な値なので SESSION と一致しない
→ エラー発生し登録失敗
No.2
- 回答日時:
htmlspecialcharsでエンコードしているのでデコードをするか、セッションの方と同じくエンコードしてから比較する必要があるかもしれません。
いつも回答ありがとうございます。
本職の技術者でないため、詳しく教えて欲しいです。いずれの自身の会社のホームページの作成で奮闘しています。セキュリティもある程度あるログイン機能が欲しいのです。
何とかvscodeを使用してデバッグは行うのですが、
このプログラムをブラウザで開き、入力画面にデータを入れてsubmitしてデバッグを開始すると、プログラムの頭でも、既に$_POSTのtokenにデータが入っているのですが、自動生成されたものなのでしょうか?$_SESSIONはsession_start()でからデータが入っており、値は自動生成のように思えるので、値は違って当然なのでは?という疑問が拭えません。
No.1
- 回答日時:
URLを全て見ているとキリがないですが、
文章から察するに、作成したトークンをセッションに保持し、画面表示時に隠しデータとしてユーザーに送ります。この時サーバーはセッションを保持しますから、ユーザーがsubmitボタンを押した際に、この一致をチェックすることで、悪意のあるなりすまし攻撃を防ぐという、バリデーションと思います。
ただのセキュリティの都合ですから、学習用途で入れる必要はありません。
一致しないと端的に言っても例えば、セッションとポストデ渡ってくる値を出力して見比べるとか、どの段階でその変数にその値が入るのかをチェックするなど、
技術者なのであれば、そのデバッグ行為はご自身で行ってください。
以下蛇足
うちの職場にもデバッグ行為をせずにブラックボックステストの手順と結果だけを報告してくる無能の先輩が居ます。
こういう奴は生産性を落とす害悪でしかありません。技術者なら自分で調査できるはずですし、自分と同じか、それ以上の給料を貰ってるなら、それ分の働きはして欲しいものでふ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トランザクションが原因?DBに...
-
phpのheader("Location:#pos")...
-
.htaccessにphp_valueが使用できな
-
*.php、*.php3、*.phtmlの違い
-
mysql→EUC-JP、php→UTF-8の時の...
-
phpでメール送信できません 原...
-
phpのextension_dirを複数指定...
-
phpの中でphpを書けないか
-
PHP PDOライブラリが読み込まれ...
-
mamp環境でのcronの使い方で困...
-
PHPでメールを受信するには?
-
再度、xamppにおけるjpgraphの...
-
セッションについての設定なの...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
-
PHP版のPDFlibのインストール
-
PHPのif文でその処理を途中で抜...
-
header(Location:~)で$_SESS...
-
PHPからMSSQLへの接続結果の文...
-
includeでHTMLファイルを呼出し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[php初心者]サイトを見てデータ...
-
PHP8を使うと、大量のWarningが...
-
フォントの色を変えるには?
-
PHPで、エラーがない場合のみ画...
-
ワードプレスサイト PHP8.0.25...
-
トランザクションが原因?DBに...
-
PHPでSMTPを使ってメール送信で...
-
「@$変数」の「@の意味は?」
-
あらゆる例外に対応できるエラ...
-
PHPでネットワークドライブのop...
-
正規表現での最後尾のバックス...
-
phpのIF条件分岐で、代入する値...
-
qmailによるメールの受信について
-
PHPにて外部サイト内容が取得不...
-
phpでこの記述をもっと簡単に書...
-
bindValueエラー
-
Bootstrap3 と Faundation5 を...
-
PHPエラーチェック:ローカルで...
-
PHPでfatal errorが出ても無視...
-
AptanaStudioでASP形式のPHPシ...
おすすめ情報