teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

体裁変更

2021/06/07 14:11

投稿

_Soma
_Soma

スコア16

title CHANGED
File without changes
body CHANGED
@@ -70,9 +70,9 @@
70
70
  }
71
71
  header('Location: ./index.php?member='.$member);
72
72
  ```
73
+ ■touroku.php 確認用
73
74
  ```PHP
74
75
 
75
- ■touroku.php 確認用
76
76
  <?php
77
77
  session_start();
78
78
  echo $_POST["csrf_token"];

1

セッションを使用し2重登録の対策を試みましたがうまく動きません。

2021/06/07 14:11

投稿

_Soma
_Soma

スコア16

title CHANGED
File without changes
body CHANGED
@@ -6,6 +6,12 @@
6
6
  原因と対策方法を教えていただけないでしょうか。
7
7
  ※今のところPCは2重登録ができない。
8
8
 
9
+ 2重登録の対策でセッションを使用してみようと思ってコードを変更してみたところ、
10
+ 「不正なリクエストです」となってしまいます。
11
+ echoで確認しても両方空のようでうまく動きません・・・
12
+ ほぼ参考サイトのコピペなのですがなぜでしょうか。
13
+ ※index側では値が入っているのは確認できました。
14
+
9
15
  ついでに質問:
10
16
  ■下のような書き方をしたいのですが、取得できなかった時どうなるのか分からずうまく動きません。
11
17
  書き方を教えていただけたらと思います。
@@ -21,6 +27,10 @@
21
27
 
22
28
  ■index.php
23
29
  ```PHP
30
+ session_start();
31
+ $toke_byte = openssl_random_pseudo_bytes(16);
32
+ $csrf_token = bin2hex($toke_byte);
33
+ $_SESSION['csrf_token'] = $csrf_token;
24
34
 
25
35
  $ip = $_SERVER['REMOTE_ADDR'];
26
36
  $point = 0;
@@ -33,7 +43,7 @@
33
43
 
34
44
  if( $point < 1 ) {
35
45
   echo '<form action="./touroku.php" method="POST">';
36
-  
46
+ echo ' <input type="hidden" name="csrf_token" value="<?=$csrf_token?>">';
37
47
   echo ' <label><input type="radio" name="text" value="A"> A</label><br>';
38
48
   echo ' <label><input type="radio" name="text" value="B"> B</label><br>';
39
49
   echo ' <input type="submit">;
@@ -59,4 +69,19 @@
59
69
   $member = $text;
60
70
  }
61
71
  header('Location: ./index.php?member='.$member);
72
+ ```
73
+ ```PHP
74
+
75
+ ■touroku.php 確認用
76
+ <?php
77
+ session_start();
78
+ echo $_POST["csrf_token"];
79
+ echo $_SESSION['csrf_token'];
80
+
81
+ if ( $_POST['csrf_token'] === $_SESSION['csrf_token']) {
82
+ echo "aaa";
83
+ } else {
84
+ echo "不正なリクエストです";
85
+ }
86
+ ?>
62
87
  ```