【ECCUBE2】スパム対策としてお問合せフォームにreCaptchaを導入

定期的に中国から来る迷惑なお問合せフォームを利用したスパム。

スパムの一例↓

このように、メールアドレス欄に不特定多数のメールアドレスを指定し、自動返信機能を利用してメールを送り付けている。

今までは接続元IPを特定して、apacheの設定ファイルなり.htaccessで個別にアクセスを拒否するなど、対症療法をしていましたが、業務の負担になりつつあるので、導入することにしました。

結果として効果はかなりあったようで、対策後およそ1か月、未だスパムによる被害は1回もうけていません。

reCaptchaをECCUBE2のお問合せフォームに導入する手順は以下の通りです。

サイトキーとシークレットキーの取得

  1. reCaptchaにアクセスし「Admin console」を開きます。Googleアカウントが必要になります。
  2. 必要事項を入力し、サイトキーとシークレットキーを取得します。(今回は「」を採用します。)

テンプレートを修正

ECCUBE2のお問合せフォーム(確認画面)のテンプレートファイルを修正します。

スマホページも運用している場合はそちらのテンプレート(data/Smarty/templates/sphone/contact/confirm.tpl)も同様に修正します。

PHPファイルの修正

お問い合わせの受付・自動返信メール送信処理を行うPHPファイルを修正します。

確認

確認画面の右下に、以下のようなreCAPTCHAアイコンが表示されていれば、適用完了です。

 

参考サイト)

 

EC-CUBEでhreflangタグを設置する

Googleが推奨するhreflangタグ。SEO効果はほとんどないみたいだが、サーチコンソールに出るのが嫌な場合は対策が必要。

タグを設置するのは簡単だが、このタグはサイトごとではなくページ単位で有効なタグなので、ページ毎に設置する必要がある。その為、下層のページにはその下層のページのURLで設置する必要がある。

EC-CUBEの場合は、site_frame.tplに下記のように書くことで、下層を含む全ページに対応可能。(例では言語は’ja’のみ)

/data/Smarty/templates/default(またはsphoneなど)/site_frame.tpl

 

参考URL)

 

EC-CUBE2系+PHP5.4でファイル管理を開くとエラーになる場合の対処

エラーの発生条件

  • EC-CUBE2.13.2
  • PHP5.4

管理画面で、「コンテンツ管理」→「ファイル管理」を開くと、下記のエラーがでる。

 

どうやらPHP5.4から、関数のパラメータにスーパーグローバル変数と同じ名前の変数を使用することができなくなったことが原因らしい。

「data/class/pages/admin/contents/LC_Page_Admin_Contents_FileManager.php」を修正して対処する。

 

(参考サイト:https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=10792&forum=9&post_id=50986

EC-CUBE(2系)で管理者権限の設定

動作確認はEC-CUBE2.13.2。結構古いけど。

例えば一部のメンバーは、商品管理メニューしか操作できないようにしたい時とか。

    1. まず「システム設定」→「マスターデータ設定」から「mtb_authority」を選択。
    2. 「追加のデータ」欄に、IDを指定(例えば2)し、値に権限名(例えば「商品管理者」)を入力。→「この内容で登録する」
    3. 「システム設定」→「マスターデータ設定」から「mtb_permission」を選択。
    4. 「基本情報管理」以下にアクセスできなくする場合、「追加のデータ」欄に、ID「/admin/basis/」、値「1」を設定。(この値が、ログインしたメンバーのID以下ならアクセス可能になる。ここを「2」にすれば追加した商品管理者もアクセス可能になる。)
    5. 他にもアクセス不可にしたいページがあれば、同様に「mtb_permission」に追加する。
    6. 「/data/class/SC_Session.php」を編集。
    7. 「/data/class/pages/error/LC_Page_Error_DispError.php」を編集。
    8.  「/data/Smarty/templates/admin/login_error.tpl」を編集。

以上。

  1. さらにメニューを非表示にしたい場合は、こちらなどを参照。

 

参考URL)

Smartyでループ内のindexを得る

Smartyのループの中で、現在何番目の処理かを知りたいときなどは、「index」プロパティを使用します。

 

例)リスト10件おきに広告を表示したいとき

 

参考URL)