スパム配信者デビューしない方法を考える

本稿はConoHa Advent Calender 2022 21日目の記事です。

先日、料金が安く設定が楽とのことでConoHaWINGでレンタルサーバデビューをしました。
試してびっくり。管理画面の案内表記とヘルプページ※1を頼りに、ボタンをぽちぽちすればあっという間に見栄えのするwebサイトが立ち上がります。

その話でも…!と思いましたがせっかくのQiita初投稿、Advent Calender初参加ですので頑張ってもう少し踏み込んで書くことにしました。

※1 https://support.conoha.jp/wing/?btn_id=top_wing

## 概要
ネットサーフィンしていると良く見かけるお問合せフォーム。サイト訪問者にとって、手軽に問い合わせができる便利な機能です。
そのお問合せフォームを使ってスパムを送信する手法があり、対策を講じないといつの間にか自分が加害者になってしまうかも...

そうならないための対策方法として、
お問合せフォームの送信者が(スパムを送ろうとする)botか、人間か判定するためreCAPCHAを使用する方法がよく紹介されています。
そこに最近、reCAPCHAに替わる判定方法としてTurnstileが登場しました。

お問合せフォームを使ったスパム送信方法に軽く触れつつ、実際にTurnstileをお問合せフォームに実装してみます。

**警告**
・当記事の検証はスパムの配送を防止の目的遂行とその動作検証を目的としています。
・検証に使用したお問合せフォームは、送信先を自身の所有するメールアドレス以外に送信されないよう設定を変更した上で確認を行っています。他人のwebサイトやメールアドレスを使用し、コンタクトフォームからのメール送信を試す等、迷惑をかける行為は絶対に行わないでください。


## お問合せフォームとは

お問合せフォームは用途によってカスタマイズできますが、大まかに以下の3つの項目を入力することになります。
・問い合わせをしている本人の名前
・返信先メールアドレス
・問い合わせ内容
![B9C04509-8060-44B6-AF80-975EE6BD002A.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/6e748478-4b8c-7ed4-db14-eca68cc5f5a0.jpeg)画像: お問合せフォームの例

往々にして"返信先メールアドレス"に入力したメールアドレス宛てに
問い合わせ内容を記載した、お問い合わせを受け付けた旨を知らせるメールが自動で届くわけです。
ここまでは便利な正しい機能の使い方。


## スパム配信の仕組み

ここからはお問合せフォームを使ったスパム送信の方法です。
お問合せフォームに入力した、返信先メールアドレス欄には自分のメールアドレスでなくても入力が可能です。
そのまま送信すれば、入力したメールアドレス宛にお問合せ内容が記載されたメールが届きます。
![DC9C09DA-4A7D-43B3-80B6-348306D18CC9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/dceee9e5-ce12-0011-5ce7-473fce599f79.jpeg)
画像: お問合せフォームの悪用例

結果、この仕組みをそのまま使うだけでメールアドレス無しに任意の宛先に好きなだけメールを送ることができるわけです。
スパムメールを送られる側からすれば迷惑話ですね。

ちなみにwebサイト運営者側は無傷かといえば、そうではないと思います。
お問合せの受付通知メールにはwebサイト名をテンプレートで入れるでしょうから、webサイトの名前入りのスパムが撒かれることになりますよ。


## ではどうするか

1.お問合せの受付通知メールの送信をやめる

そもそもお問合せの受付通知メールは必要か今一度考えていただき、不要であれば受付通知メールの送信を止めていただくのが、確実で簡単な方法です。

2.reCAPCHAなど、お問合せフォームを送信しようとしているのが人間かbotか判定する仕組みを導入する。

当記事で取り上げるTurnstileは、2番に該当する手法です。
完全にスパムの送信を止めることはできないものの、お問合せフォームの受付通知メールを維持しつつスパムの送信被害を軽減します。


## 実装環境

サーバ: レンタルサーバ(ConoHaWING)
webページの実装: Word Press バージョン 6.1.1
WordPressのテーマ: Cocoon バージョン 2.4.3
お問合せフォームの実装: Contact Form 7 バージョン 5.7.1

ConoHa WINGのかんたんインストール機能を使用して、サーバにWord Pressをインストールします。
Contact Form7はWordPressのプラグインで、ボタン一つでお問合せフォームが導入可能になります。

構築手順は、Googleで検索いただければ沢山出てきますので、そちらをご参照ください。
余裕があれば追って更新します。


## 検証方法
reCAPCHA v3やTurnstileはwebサイトとのやりとり(振る舞い)に基づき判定しています。
筆者(人間)が手動でお問合せフォームを入力しては意味がないため、
自身のメールアドレス宛にスパムメールを送信するスクリプトを作成し、
正常動作を確認します。


## 実装

### Turnstileの導入
ざっくりと以下の手順で導入を進めます。
1. Cloudflareへのアカウント登録を行う
2. Turnstileにサイト情報を入力。サイトキーとシークレットキーを取得する
3. Word PressプラグインSimple Cloudflare Turnstileを導入
4. サイトキーとシークレットキーを入力して設定

#### 1. Clouflareへのアカウント登録を行う
既にCloudflare製品を利用中の場合はダッシュボードからTurnstileを使用できる。
Cloudflare製品を利用していない場合は、以下のリンクより情報を入力し、登録してください。登録するとメールに導入の案内が届きます。

Turnstile: https://www.cloudflare.com/ja-jp/lp/turnstile/

Cloudflareへのアカウント登録を指示されるため、メールに記載されたリンクよりアカウント登録を行います。
![75BE7FF3-AD2A-407A-A7F9-3C42FAC9EE3B.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/d12d5aae-9580-19a1-abd3-e9de35ded7a4.jpeg)


#### 2. Turnstileにサイト情報を入力。サイトキーとシークレットキーを取得する

![95674453-EBA9-4756-91EE-40953C57A3AA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/92ed1cd3-78f4-3ee2-b3a8-5992615c50d1.jpeg)

Cloudflareのアカウントにログインするとダッシュボード左側のタブにTurnstileタブ(①)があるため、クリック、
画面中央に"サイトを追加"ボタンが現れるため、クリックする
すると、"サイトを追加"画面が出てくるため、サイト名・ドメイン・ウィジットの種類を選択肢、作成ボタンをクリックする。
![EC02B0DA-E059-473C-8972-62668DB77D18.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/d30e3650-2a2d-3ed9-e0d6-88b9de53c27d.jpeg)
画面遷移先で表示されるサイトキー、シークレットキーはこの後で使用するため後で確認できるようにしておく。

#### 3. Word PressプラグインSimple Cloudflare Turnstileを導入

Word Press管理画面より、Simple Cloudflare Turnstileをインストールする。
![2122BD15-E55F-4541-9CB6-1FE11DEBEABD.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/8c30fcf1-90db-4304-5f90-e0cd2a1bc39e.jpeg)
画面右上のキーワードに入力してプラグインを検索し、出てきたら"今すぐインストール"を選択する。
![9F43FDAE-0B16-439D-B4AC-441B79066523.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/741c04e7-b5d6-7e34-5815-e06e6bd6ba19.jpeg)
インストール完了したら、"有効化"をクリックする

#### 4. サイトキーとシークレットキーを入力して設定
Simple Cloudflare Turnstileの設定画面に遷移する。
![404AD3B6-CF10-4210-B290-BDAF187F4EDF.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/554b35a2-451e-61c5-b9e1-36ca5a9fbf56.jpeg)
先刻Cloudflareで確認したサイトキー、シークレットキーをコピーして入力、
さらに画面下に"フォームでTurnstileを有効化する"旨の設定がある。
![D90CF729-14F3-4CF4-BCC8-E59068D518BA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/b44825ac-3003-f1a8-09b0-4d407c6e4856.jpeg)
Contact Form 7のタブを開き、"すべてのCF7のフォームで有効化"にチェックを入れ、"変更を保存"ボタンを押す
![C4D9293E-705F-488D-9D8A-D7B6FA37BC5C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/ec11a4a0-41d9-7d8d-0ddb-9aab35a01172.jpeg)
すると画面中央に"API応答テスト"ボタンがが表示されるため、クリック。
![F68B6297-CBCC-4CFA-94FA-475AD32F37D9.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/172ee3fd-83c3-b651-0d67-a42027b2e0f9.jpeg)
"成功!TurnstileはこれらのAPIキーで正しく動作するようです。"と表示されればOK。


### 画面表示確認
![5583B050-2B37-423B-A001-FF2777C63E17.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/3af43987-52f7-03ab-47ab-753e0571e719.jpeg)
お問合せフォームを開くと、Cloudflareのアイコンが表示されるようになっています。

### 検証
スパム送信テスト用のスクリプトを実行し比較検証する。

スパム送信対策が何もない状態で、スクリプトを実行した場合
![43FEFEDD-9A95-465D-949A-26931993E60E.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/ff476b74-80b7-ae38-d4ca-29691748b3e2.jpeg)
status: mail sent
→メールが配送される

Turnstileを導入した状態で、スクリプトを実行した場合
![3BEB9346-B588-4B21-A8F7-73D3851BE78A.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982993/57d0b933-a94f-8ce9-9db3-39bc8770b6d0.jpeg)
status: validation_failed
→メールは配送されない


ちなみに、reCAPCHA v3を導入した状態でスクリプトを実行すると、
status: spam
となり、こちらもメールは配送されません。

## まとめ
・Turnstileの導入により、botによるスパム送信を阻止できる
・Turnstile用のwordpressプラグインがリリースされていることもあり、とても簡単に導入できる

今回確認した中で上記2点が分かりました。
Trunstileの他にもreCAPCHAの導入確認・検証していますが、
いずれもサクッと導入できてしまいます。

スパム対策をしていないよ。という方は、自身のwebサイトがスパムの温床にならないよう対策をお勧めします。