■Google reCAPTCHA
※ロボットによるアクセスを弾くことができる
※今新規に導入するならV3で良さそう
ただし1ヶ月間に100万回を超えたり、1秒間に1000回を超えるようなキーのリクエストがある場合、有料のEnterprise版にする必要がある
reCAPTCHA
https://www.google.com/recaptcha/about/
reCAPTCHAとは?どんなツールで何ができるのかをご紹介します! | MarkeTRUNK
https://www.profuture.co.jp/mk/column/33599
「reCAPTCHA」って?スパム対策に効果的なreCAPTCHAをフォームに入れてみた | BLOG | シナジーマーケティング株式会社
https://www.synergy-marketing.co.jp/blog/using_recaptcha_on_form
フォームの迷惑メール対策で有効なGoogle「reCAPTCHA」の導入方法とEnterpriseの違い【2021年版】 | ビギブ
https://www.beginnerweb.net/recaptcha-form.html
(新) Google reCAPTCHA V3 リキャプチャ設置、設定方法 - Blog | Samurai Web Works サムライウェブワークス -ロサンゼルスのウェブデザイン会社-
https://samurai-web-works.com/info/usefultools/how-to-set-up-google-recaptcha-v3/
(新) Google reCAPTCHA V2 リキャプチャ設置、設定方法 - Blog | Samurai Web Works サムライウェブワークス -ロサンゼルスのウェブデザイン会社-
https://samurai-web-works.com/info/usefultools/how-to-set-up-google-recaptcha-v2/
■reCAPTCHA導入用のフォームメールを作成
以下のフォームメールを作成し、これにreCAPTCHAを導入するものとする
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>フォームメール</title>
</head>
<body>
<h1>フォームメール</h1>
<form action="send.php" method="post">
<dl>
<dt>件名</dt>
<dd><input type="text" name="subject" size="30" value=""></dd>
<dt>送信者名</dt>
<dd><input type="text" name="name" size="30" value=""></dd>
<dt>メールアドレス</dt>
<dd><input type="text" name="mail" size="30" value=""></dd>
<dt>本文</dt>
<dd><textarea name="message" cols="30" rows="5"></textarea></dd>
</dl>
<p><input type="submit" value="送信する"></p>
</form>
</body>
</html>
send.php
<?php
mb_language('Japanese');
mb_internal_encoding('UTF-8');
$body = '件名:' . $_POST['subject'] . "\n"
. '送信者名:' . $_POST['name'] . "\n"
. 'メールアドレス:' . $_POST['name'] . "\n"
. '本文:' . $_POST['message'];
if (mb_send_mail(
'refirio@gmail.com',
'フォームからメールが送信されました',
$body,
'From: info@refirio.org'
)) {
exit('Complete!');
} else {
exit('Error!');
}
■reCAPTCHA v3を導入
以下にアクセスする
reCAPTCHA
https://www.google.com/recaptcha/admin/create
ラベル: refirio.org v3検証
reCAPTCHA タイプ: reCAPTCHA v3
ドメイン: refirio.org
オーナー: (自身のGmailアドレスが、はじめから設定済みになっていた)
「reCAPTCHA 利用条件に同意する」と「アラートをオーナーに送信する」にチェックを入れ、「送信」ボタンを押す
以下が表示される。シークレットキーは外部に漏らさないように注意
「refirio.org v3検証」が登録されました。
このサイトキーは、ユーザーに表示するサイトの HTML コードで使用します。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
このシークレットキーは、サイトと reCAPTCHA 間の通信で使用します。
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
これで完了
この後「v3 Admin Console」にアクセスすると、合計リクエスト数や不審なリクエストのパーセンテージが表示されるようになった
フォームメールを以下のように調整
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX と YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY の部分は、
それぞれ自身のサイトキーとシークレットキーにする
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>フォームメール</title>
<!-- headタグの最後に追加ここから -->
<script src="https://www.google.com/recaptcha/api.js?render=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', {action: 'homepage'}).then(function(token) {
var recaptchaResponse = document.getElementById('g-recaptcha-response');
recaptchaResponse.value = token;
});
});
</script>
<!-- headタグの最後に追加ここまで -->
</head>
<body>
<h1>フォームメール</h1>
<form action="send.php" method="post">
<dl>
<dt>件名</dt>
<dd><input type="text" name="subject" size="30" value=""></dd>
<dt>送信者名</dt>
<dd><input type="text" name="name" size="30" value=""></dd>
<dt>メールアドレス</dt>
<dd><input type="text" name="mail" size="30" value=""></dd>
<dt>本文</dt>
<dd><textarea name="message" cols="30" rows="5"></textarea></dd>
</dl>
<!-- 確認ボタンや送信ボタンの上に追加ここから -->
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">
<!-- 確認ボタンや送信ボタンの上に追加ここまで -->
<p><input type="submit" value="送信する"></p>
</form>
</body>
</html>
send.php
<?php
mb_language('Japanese');
mb_internal_encoding('UTF-8');
/* メール送信の前に追加ここから */
$recaptcha = isset($_POST['g-recaptcha-response']) ? $_POST['g-recaptcha-response'] : null;
if (!$recaptcha){
exit('reCAPTCHAにチェックを入れてください。');
}
$response = json_decode(file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY&response=' . $recaptcha), true);
if (intval($response['success']) === 1 && $response['score'] >= 0.5) {
echo 'reCAPTCHAでの認証に成功しました。';
} else {
exit('reCAPTCHAでの認証に失敗しました。');
}
/* メール送信の前に追加ここまで */
$body = '件名:' . $_POST['subject'] . "\n"
. '送信者名:' . $_POST['name'] . "\n"
. 'メールアドレス:' . $_POST['name'] . "\n"
. '本文:' . $_POST['message'];
if (mb_send_mail(
'refirio@gmail.com',
'フォームからメールが送信されました',
$body,
'From: info@refirio.org'
)) {
exit('Complete!');
} else {
exit('Error!');
}
「success」の他に「score」の値も返され、これを使うことでより精度の高いロボット判定ができるとされている
ひとまず「スコアが0.5以上なら人間とみなす(0.5より小さければロボットとみなす)」の指定をしておくと良さそう
手動でGoogle reCAPTCHAを設定する
https://ichikawa-webdesign.com/archives/6531
reCAPTCHA v3 に対して Autify でテスト自動化してみた - Qiita
https://qiita.com/hiroxyy/items/fd5f3d5738f0fc770fc9
■reCAPTCHA v2を導入
以下にアクセスする
reCAPTCHA
https://www.google.com/recaptcha/admin/create
ラベル: refirio.org v2検証
reCAPTCHA タイプ: reCAPTCHA v2
「私はロボットではありません」チェックボックス
ドメイン: refirio.org
オーナー: (自身のGmailアドレスが、はじめから設定済みになっていた)
「reCAPTCHA 利用条件に同意する」と「アラートをオーナーに送信する」にチェックを入れ、「送信」ボタンを押す
以下が表示される。シークレットキーは外部に漏らさないように注意
「refirio.org v2検証」が登録されました。
このサイトキーは、ユーザーに表示するサイトの HTML コードで使用します。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
このシークレットキーは、サイトと reCAPTCHA 間の通信で使用します。
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
これで完了
この後「v3 Admin Console」にアクセスすると、合計リクエスト数や不審なリクエストのパーセンテージが表示されるようになった
(実装したのはv2だが表示された)
フォームメールを以下のように調整
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX と YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY の部分は、
それぞれ自身のサイトキーとシークレットキーにする
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>フォームメール</title>
<!-- headタグの最後に追加ここから -->
<script src='https://www.google.com/recaptcha/api.js'></script>
<!-- headタグの最後に追加ここまで -->
</head>
<body>
<h1>フォームメール</h1>
<form action="send.php" method="post">
<dl>
<dt>件名</dt>
<dd><input type="text" name="subject" size="30" value=""></dd>
<dt>送信者名</dt>
<dd><input type="text" name="name" size="30" value=""></dd>
<dt>メールアドレス</dt>
<dd><input type="text" name="mail" size="30" value=""></dd>
<dt>本文</dt>
<dd><textarea name="message" cols="30" rows="5"></textarea></dd>
</dl>
<!-- 確認ボタンや送信ボタンの上に追加ここから -->
<div class="g-recaptcha" data-sitekey="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"></div>
<!-- 確認ボタンや送信ボタンの上に追加ここまで -->
<p><input type="submit" value="送信する"></p>
</form>
</body>
</html>
send.php
※v3と同じ実装を行う