ブログのスパムメッセージを簡単にブロックする方法
スパムは通称スパムと呼ばれ、ほとんどの人が目にしたことがあると思います。以前WordPressを使っていた時は、アンチスパムのプラグインをインストールしていたので、ほとんどのSpamをブロックできたのですが、先月WordPressから新しいブログプラットフォームに移行してからは、初日にいくつかのSpamに遭遇しましたが、どれも海外のプロモーション広告か何かでした。ブログの訪問者数自体は非常に少ないので、毎日数件のSpamがあれば、あまりにひどいので、手動で削除するのも時間がかかりすぎるし、自分で書いた小さなシステムなので、プラグインのオプションを持つ方法がなく、解決策を見つけるしかないのですが、どうしたらいいでしょうか。
スパムは画像から正しいキャプチャを識別するのが難しいので、この問題を解決するためにキャプチャを追加するサイトをよく見かけますが、普通のコメント投稿者にはいきなり余計なステップなので、これらのスパムをブロックするために他に何があるのでしょうか。
よく考えてみると、通常のメッセージは人間がブラウザーを通じてデータをサーバーに送信しているのに対し、スパムは通常、インターネット上のコメントフォームをスキャンしてフォームのデータを偽造し、そのフォームのアクションを判断してそのアクションにデータをPOSTする固定プログラムであることがわかります。つまり、スパムの送信者は、ブラウザーを通じて私たちのフォームのページを訪れていないため、ページ上のJavaScriptは一切実行されていないことになるのです。
まず、通常のユーザーからは見えない隠しテキストボックスをフォームに設置します。
<div style="margin:0;padding:0;display:inline">
<input id="checkspam" name="checkspam" type="hidden" value="Hello Ruby" />
</div>
次に、このテキストボックスの値を変更するための小さなJavaScriptのコードを記述します。
jQuery(document).ready(function($) {
$("#checkspam").val('abcdefg');
});
Spam送信者の場合、JavaScriptは実行されないので、次にサーバー側でhiddenテキストボックスの値を判断し、JavaScriptによって変更されていなければ、そのメッセージは間違いなくSpamです(ブラウザがJavaScriptを無効にしている通常のユーザーを除く)。
Ruby on Railsのアプリケーションの例です。
if params[:checkspam] == "abcdefg"
@comment.save
else
# It's a spam...
end
実は、この隠しテキストボックスは、JavaScriptの助けを借りてキャプチャが自動的に入力されることを除けば、キャプチャと同じことをするのです。
この方法を使い始めてから1ヶ月以上経ちますが、もうスパムは来ていません。
関連
-
win7でrubyのソースコードからコンパイルしてインストールする方法
-
Ruby正規表現とサンプルコード
-
基本的なユーザー登録とログイン機能を実装するためのRuby on Railsチュートリアル
-
PythonのFlaskフレームワークでSERVER_NAMEドメイン名を設定するためのチュートリアル
-
Rubyのデザインパターン。プログラミングにおけるストラテジーパターンの活用
-
デザインパターンのうち、ProxyパターンとDecorativeパターンを使ったRubyのコード例
-
Rubyにおける数値型と定数の例
-
Ruby on Railsのインストールに関する簡潔で迅速なガイド
-
Rubyの基本構文
-
Rubyで配列とハッシュテーブルを使う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Rubyを使ったFTPパスワードクラッキング
-
画像フィルターアルゴリズムコードのRuby実装
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Rubyのgemパッケージ管理およびgemソース構築のチュートリアル
-
Rubyのオブジェクト指向プログラミングにおけるスコープの簡単な説明
-
Rubyのgemパッケージマネージャの使い方とbundlerによる複数バージョンのgemの管理
-
RubyのTimeオブジェクトの共通機能まとめ
-
Ruby on Railsのjquery_ujsコンポーネントが遅くなる問題が解決された
-
Rubyのコードコメントを書く際に気をつけるべき事項
-
Rubyの変数参照に関するいくつかの注意点