定期的に中国から来る迷惑なお問合せフォームを利用したスパム。
スパムの一例↓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
: この度のお問い合せ誠にありがとうございます。 以下の内容で承りました。 回答を要するもので、万一、ご回答メールが届かない場合は、 受信トラブルの可能性もありますので 大変お手数ではございますがもう一度お問い合わせいただくか、 お電話にてお問い合わせください。 今後ともご愛顧賜りますようよろしくお願い申し上げます。 ■会社団体名 : 城特邀,彩�牡首拵送э0%【】网址:[www.clf30.com] ■フリガナ : 未登録 ■お名前 : 来了就送 城特邀,彩�牡首拵送э0%【】网址:[www.clf30.com] 様 ■フリガナ : カタカ カタカ 様 ■電話番号 :-- ■メールアドレス:henson77777@qq.com ■お問い合わせの内容 城特邀,彩�牡首拵送э0%【】网址:[www.clf30.com] : |
このように、メールアドレス欄に不特定多数のメールアドレスを指定し、自動返信機能を利用してメールを送り付けている。
今までは接続元IPを特定して、apacheの設定ファイルなり.htaccessで個別にアクセスを拒否するなど、対症療法をしていましたが、業務の負担になりつつあるので、導入することにしました。
結果として効果はかなりあったようで、対策後およそ1か月、未だスパムによる被害は1回もうけていません。
reCaptchaをECCUBE2のお問合せフォームに導入する手順は以下の通りです。
サイトキーとシークレットキーの取得
- reCaptchaにアクセスし「Admin console」を開きます。Googleアカウントが必要になります。
- 必要事項を入力し、サイトキーとシークレットキーを取得します。(今回は「reCAPTCHA v3」を採用します。)
テンプレートを修正
ECCUBE2のお問合せフォーム(確認画面)のテンプレートファイルを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
: <form name="form1" id="form1" method="post" action="?"> : <!-- <form>~</form>の任意の場所に以下を追記 ------------------> <!-- reCAPTCHA v3 --> <input type="hidden" name="recaptchaResponse" id="recaptchaResponse" /> <!-------------------------------------------------------------> : </form> : <!-- 任意の場所に以下のjsコードを追記 -----------------> <!-- reCAPTCHA v3 Start --> <script src="https://www.google.com/recaptcha/api.js?render=サイトキー"></script> <script> grecaptcha.ready(function () { grecaptcha.execute('サイトキー', {action: 'homepage'}).then(function(token) { var recaptchaResponse = document.getElementById('recaptchaResponse'); recaptchaResponse.value = token; }); }); </script> <!-- reCAPTCHA v3 End --> |
スマホページも運用している場合はそちらのテンプレート(data/Smarty/templates/sphone/contact/confirm.tpl)も同様に修正します。
PHPファイルの修正
お問い合わせの受付・自動返信メール送信処理を行うPHPファイルを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
: case 'complete': //reCAPTCHA v3の処理を追加 ///////////////////////////////// if(isset($_POST['recaptchaResponse']) && !empty($_POST['recaptchaResponse'])){ $secret = 'シークレットキー'; $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['recaptchaResponse']); $reCAPTCHA = json_decode($verifyResponse); if (!$reCAPTCHA->success){ SC_Utils_Ex::sfDispSiteError( FREE_ERROR_MSG, '', false, "スパム対策機能により送信がブロックされました。お手数ですがブラウザの戻るボタンを押して、再度ご送信お願いします。 "); exit; } }else{ SC_Utils_Ex::sfDispSiteError( FREE_ERROR_MSG, '', false, "スパム対策機能により送信がブロックされました。お手数ですがブラウザの戻るボタンを押して、再度ご送信お願いします。 "); exit; } /////////////////////////////////////////////////////////////// $this->lfInitParam($objFormParam); $objFormParam->setParam($_POST); $this->arrErr = $objFormParam->checkError(); $this->arrForm = $objFormParam->getFormParamList(); if (SC_Utils_Ex::isBlank($this->arrErr)) { $this->lfSendMail($this); // 完了ページへ移動する SC_Response_Ex::sendRedirect('complete.php'); exit; } else { SC_Utils_Ex::sfDispSiteError(CUSTOMER_ERROR); exit; } break; : |
確認
確認画面の右下に、以下のようなreCAPTCHAアイコンが表示されていれば、適用完了です。
参考サイト)