Mutter
編集

お問い合わせスパムボット対策

アイキャッチ画像

某スワロフスキーのアフィリエイトの会社が

問い合わせで

スワロフスキーのアフィやらない?

って、定期的にお問い合わせからメッセージ送ってきます

もう何年もです

マジうざい、、、

Googleフォーム使っているから見に行くまで誰だかわからないんですよね

で、見に行って即削除の繰り返し

登山ブログで

スワロフスキーのアフィ

やるわけないだろ!!

チェックボックス作ってみたんですが意味なし

人間が送ってきているのか、、、

スパムボット対策

人間が送ってきているとしたら、、、

Googleフォームでは防ぎようがないんですが、、、
※アドレスや特定の言葉を指定してブロックしたりできないから

定期的に定型文を送ってくる

しかも、こんな弱小ブログ&登山ブログ(スワロフスキーと無関係すぎる)に送ってきているのでボットの可能性が非常に高い

ボット対策にと思いチェックボックス作ったのになんでだ、、、

AIに聞いてみると

ボットもチェックボックスにチェックいれるよ

だって!!

マジか!? なんか対策できない?
ハニーポットで対策できるよ

ボットを認識して
送信できなくするコードを作ってもらいました


ハニーポットとはCSSで人間には見えないように隠した入力フィールドのことです。ボットはページを解析してすべてのフィールドに自動入力するため、この隠しフィールドにも値を入れてしまいます。送信時にそのフィールドに値が入っていたらボットと判定して送信をブロックします。

語源:ハニーポット(honeypot)は「蜂蜜の壺」という意味で、蜂蜜の甘い香りに虫がおびき寄せられるように、攻撃者やボットをわざと罠に引き寄せて検知・ブロックするという概念からきています。もともとはサイバーセキュリティの世界でハッカーをおびき寄せるおとりのシステムやサーバーのことを指していましたが、フォームのスパム対策にも同じ考え方で使われるようになりました。

出典:Claude(Anthropic)


ハニーポットコード

<p style="text-align: center;">コメント欄に書けない事(プライベートな事を含む)</p>
<p style="text-align: center;">ご指摘、お問い合わせ等がありましたら</p>
<p style="text-align: center;">こちらのメールフォームから送ってください</p>
<p style="text-align: center;">※このメールフォームはGoogleフォームを利用しております</p>
<form action="https://docs.google.com/forms/d/e/××××××××××××××××××××××××××××××××××××××××××××××××××/formResponse" id="form">
  <div class="label">お名前</div>
  <input id="name" name="entry.××××××××" required type="text">
  <div class="label">メールアドレス</div>
  <input id="email" name="entry.××××××××" placeholder="E-mail" required type="text">
  <div class="label">お問い合わせ内容</div>
  <textarea id="msg" name="entry.××××××××" required></textarea>
  <div class="spam-check-box">
    <label>
      <input id="human-check" name="entry.××××××××" type="checkbox" value="スパムチェック">
      <span>私は真っ当な人間だとは言い切れませんが、たぶんまともな方です</span>
    </label>
    <div id="check-error">まともな人しか送信できません</div>
  </div>
  <!-- ハニーポット -->
  <input aria-hidden="true" autocomplete="off" id="honey" name="honey" tabindex="-1" type="text">
  <input aria-hidden="true" autocomplete="off" id="website" name="website" tabindex="-1" type="text">
  <div style="text-align:center;">
    <input id="button" type="submit" value="送信">
  </div>
</form>
<script>
const form = document.getElementById('form');
const startTime = Date.now();
form.addEventListener('submit', function(e) {
  const error = document.getElementById('check-error');
  // ハニーポット1
  if (document.getElementById('honey').value.trim() !== '') {
    e.preventDefault();
    return;
  }
  // ハニーポット2
  if (document.getElementById('website').value.trim() !== '') {
    e.preventDefault();
    return;
  }
  // 3秒以内送信防止
  if (Date.now() - startTime < 3000) {
    e.preventDefault();
    return;
  }
  // チェックボックス確認
  if (!document.getElementById('human-check').checked) {
    e.preventDefault();
    error.style.display = 'block';
    return;
  }
  error.style.display = 'none';
});
</script>
<style>
.label {
  font-weight: bold;
  padding: 1em 0 5px;
}
#form ::placeholder {
  color: #ccc;
}
.spam-check-box {
  margin: 1.5em 0;
  padding: 10px;
  background: #444;
  border-radius: 3px;
}
.spam-check-box label {
  display: flex;
  align-items: center;
  cursor: pointer;
  color: #fff;
}
.spam-check-box input[type="checkbox"] {
  width: 18px;
  height: 18px;
  margin-right: 10px;
  cursor: pointer;
}
#check-error {
  display: none;
  color: #ff6666;
  font-size: 0.9em;
  margin-top: 8px;
  padding-left: 5px;
}
#button {
  border: none;
  border-radius: 3px;
  font-size: 1.2em;
  padding: .3em 2em;
  margin-top: 2em;
  background: #ff0000;
  color: #fff;
  transition: .3s;
}
#button:hover {
  box-shadow: 1px 1px 10px #fff;
  cursor: pointer;
}
#button:active {
  box-shadow: none;
}
#name,
#email,
#msg {
  box-sizing: border-box;
  padding: .5em;
  border: none;
  border-radius: 3px;
  color: #f5f5f5;
  background: #555;
  font-size: 1em;
  max-width: 100%;
  width: 100%;
}
#msg {
  min-height: 200px;
  min-width: 100%;
}
/* ハニーポット */
#honey,
#website {
  display: none !important;
  position: absolute;
  left: -9999px;
  opacity: 0;
}
</style>

これがウチのお問い合わせコードです

Googleフォームでお問い合わせを作っている方はこれ使えます

文言とかは好きな物に

formResponseのURL → ××××

各フィールドのentry.数字 → entry.××××××××

××の部分を自分のGoogleフォームの値に差し替えてください


以下、Claudeからの説明です

今回追加した対策は3つです。

① ハニーポットを2つ設置

CSSで人間には見えないように隠した入力フィールドのことをハニーポットと言います。ボットはページを解析してすべてのフィールドに自動入力するため、この隠しフィールドにも値を入れてしまいます。特にname="website"というフィールド名はボットが「URLを入れるべきフィールド」と判断して入力しやすいため、ハニーポットとして効果的です。

<input type="text" id="honey" name="honey" tabindex="-1" autocomplete="off" aria-hidden="true">
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off" aria-hidden="true">


② 3秒以内の送信をブロック

ページを開いてから3秒以内に送信されたらボットと判定してブロックします。人間が名前・メールアドレス・お問い合わせ内容を入力するのに3秒以内はあり得ないためです。

JavaScript:ハニーポット判定+3秒チェック

// ハニーポット1
if (document.getElementById('honey').value.trim() !== '') {
    e.preventDefault();
    return;
}
// ハニーポット2
if (document.getElementById('website').value.trim() !== '') {
    e.preventDefault();
    return;
}
// 3秒以内送信防止
if (Date.now() - startTime < 3000) {
    e.preventDefault();
    return;
}


CSS:ハニーポットを完全非表示に

#honey,
#website {
    display: none !important;
    position: absolute;
    left: -9999px;
    opacity: 0;
}

なお、人間が手動で送信してくる場合はこの対策では防げません。また、JavaScriptを無視してエンドポイントを直接叩いてくる高度なボットにも効果はありません。あくまで一般的なスパムボット対策としてお試しください。


出典:Claude(Anthropic)


Googleフォームをカスタマイズ | ふじろじっく

Googleフォームをカスタマイズ | ふじろじっく

Googleフォームのデザインをカスタマイズしてみた

これからGoogleフォームを使うって方は
こちらを参考にお問い合わせ作ってください


Claude

今回はClaudeに作ってもらいました

コードとかに強い感じですね

更に念の為にと思いChatGPTにコードチェックしてもらうと、これでは駄目と強化版を作ってくれ、、、

更にそれをClaudeにチェックしてもらうと

おお、パワーアップしてる!
私が作ったやつより強化されてますね。

って事でした

AIをふたつ使ってチェックさせるのは結構やります

ひとつのAIだけではなく、別のAIにチェックさせるとまた違う視点、考えをだしてくれるので良い感じですよ

素人がコードなんて書けないのでAIは本当に便利

Bloggerは無料、強制広告なし、カスタマイズができると非常に良いブログサービスなんですが、HTMLの編集ができない、、、って諦めている人も多いと思うんですよね

自分みたいな素人がBloggerでブログ運営できているのでAIを活用すれば誰でもBloggerを使えると思うんですけどね。。。

日本でももっとメジャーな存在になってコミュニティとかできたらいいのに。。。


今回の対策がどこまで通用するのか、、、

とりあえずどうなるか見てみたいと思います。。。

スワロフスキーの会社のサイトからメールで迷惑だ!!って言おうかと一瞬思ったんですが、こんな事している会社がまともな対応する筈がないのでやめました

変にサイトにアクセスしてウィルス感染とかも考えられない事もないから。。。


今回アイキャッチ画像もAIに作ってもらいました
※ChatGPT作
ChatGPT作アイキャッチ画像
ほんと便利な世の中だよねぇ


ZEROからF-lightへBloggerテーマ変更 | Trekking from Kochi

ZEROからF-lightへBloggerテーマ変更 | Trekking from Kochi

BloggerのテーマをZEROからF-liteへ変更、カスタマイズの記事もここにまとめてます

その他、Bloggerカスタマイズはこちらにまとめてます


公式オンラインショップ
スポンサーリンク

デル株式会社 EARLY SUMMERセール開催中
6月22日まで