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

回答編集履歴

2

加筆修正

2018/12/10 02:14

投稿

退会済みユーザー
answer CHANGED
@@ -44,4 +44,6 @@
44
44
  にあるような
45
45
  《フォーム生成時にサーバからの認証用のtokenを埋め込み、リクエスト送信時に一緒にサーバに返し、正しいtokenが送られてきているか検証を行う。》
46
46
  対策もご検討ください。
47
- `$_SERVER['HTTP_REFERER']`を検証するよりも間違いないですし。
47
+ `$_SERVER['HTTP_REFERER']`を検証するよりも間違いないですし。
48
+ 実装楽な事例:
49
+ [とっても簡単なCSRF対策 - Qiita](https://qiita.com/mpyw/items/8f8989f8575159ce95fc)

1

加筆修正

2018/12/10 02:13

投稿

退会済みユーザー
answer CHANGED
@@ -1,5 +1,6 @@
1
1
  すごいな、$_POSTで受け取るデータを全く何も検証せず、
2
2
  百発百中スパム送信に使えるね、これ。
3
+ 昔のphp入門書に書いてあるようなコードだな。
3
4
 
4
5
  $contentや$emailとか$nameとか、
5
6
  こういう入力があったら遮断するっていう
@@ -8,9 +9,35 @@
8
9
  mb_send_mail()にかけるまえに、
9
10
  不適切な文言が含まれているかどうかを
10
11
  PHP側で判定して遮断するべきですよ。
12
+ ```php
11
- ROLEX含んでいるかどうかとか。
13
+ <?php
12
- httpを含んでいるのを遮断するしないもご検討を。
13
14
 
15
+ $content =<<<EOT
16
+ _____ _______
17
+
18
+ _____________ __ ____________________________________________________________________________________________________________
19
+
20
+ _______________________MAX_____________________________________________________________________________________________________________________________________GET______
21
+
22
+ ___________________
23
+
24
+ http://bit.ly/2h0gmah
25
+
26
+ _________ROLEX_________________________________________
27
+
28
+ http://bit.ly/2xtv701
29
+ EOT;
30
+
31
+ if (preg_match('/bit.ly/', $content)) {
32
+ echo 'NG';
33
+ } else {
34
+ echo 'OK';
35
+ }
36
+
37
+ ```
38
+ httpは許容するけど短縮URLは拒否するって場合なら
39
+ 例えばこんなサンプルコードみたいにpreg_match()すればいいんじゃないかと。
40
+
14
41
  また、自分とこの入力フォームを使って投稿されているかどうかを
15
42
  検証するべきで、
16
43
  [PHPでCSRF対策の話 - Qiita](https://qiita.com/togana/items/ffc22d7ae4f221d1b3be)