2005-12-29 Thu

NP_NoRobotComment 0.6|チェックボックス変更

しばらく様子を見ていましたが、1分ごとの猛爆撃を耐えしのぎ、偵察スパムも完全にはじいたので、再公開します。

コメントをはじく仕組みは、前バージョンから変更ありませんが、チェックボックスが「オン」か「オフ」、どちらの状態のコメントを切り替えることにより、大爆撃をしのぐことができます。またまた短命に終りそうですが…

このプラグインの動作を確認されたい方は、下記記事にコメントしてみてください。

NP_NoRobotComment|使用方法とダウンロード

2005-12-29 Thu by pushman - Category: Nucleus
Keyword:
Comment: 4 - TrackBack: 0

このページの先頭に戻る

「NP_NoRobotComment 0.6|チェックボックス変更」へのツイート

「NP_NoRobotComment 0.6|チェックボックス変更」へのトラックバック

TrackBack URL:

「NP_NoRobotComment 0.6|チェックボックス変更」へのコメント

dj k!ng wrote...

最初のバージョンのように hidden フィールドで値を送信して, その値が一致しなければコメントを弾くようにし, そこに新たに 「チェックされていたらコメントを弾くチェックボックス」 を追加してみるというのはどうでしょう.

つまり, hidden フィールドの値が設定した値に一致し, なおかつあるチェックボックスがチェックされていないときにだけコメントを投稿できるようにします. これならコメントを投稿するのに特殊な操作は必要ありませんし, フォームを解析して自動的に POST 内容を生成するようなロボットは大抵弾けます (当然チェックボックスを無視するような実装がされていれば弾けませんが).

これでも不安であれば, また新たに 「チェックされていなければコメントを弾くチェックボックス」 を追加し, 三段階でチェックするようにします. コメントを投稿するユーザが操作する必要のないチェックボックスは CSS などで視覚上から隠しておくと良いですね.

# ただ, あまり美しい解決法とは言いがたいですし, 音声読み上げ系のブラウザを使用するユーザを混乱させかねないのであまりお勧めしません (後者は media="aural" 向けの CSS を作れば大丈夫かな). とりあえず一時凌ぎにはなるかもしれません, という程度のものです.

2005-12-29 Thu 21:31

pushman wrote...

dj k!ng さん
こんにちは。
頭が混乱してきました(笑)。

最初のバージョンのように hidden フィールドで値を送信して, その値が一致しなければコメントを弾くようにし

これは最初のバージョンの動作ですよね? ここでひっかかったら、エラーメッセージとともに「チェックされていたらコメントを弾くチェックボックス」 を表示するということでしょうか? 今のコメントスパムは、最初のチェックをすり抜けるので、2 段階に分けてもダメですよね…

すみません、読解力が不足しているようです(笑)。

遅かれ早かれこのバージョン(といっても基本的には前バージョンと同じ仕組み)も破られると思いますが、設定を切り替えることで、その回の爆撃は凌ぎます。相反する設定なので、value の値をランダムにされると二分の一の確率でコメントスパムを許可してしまいますね。

一番理想なのは、ホワイトリスト的な考えだと思うのですが、毎回キーワードを入力してもらうのはちょっと現実的ではないですし…自動で付加したいのですが、そういった処理は javascript が必要な気がしてます。切っちゃってる人も多いでしょうから、それには依存したくないんです。

Typekey 認証に対応したプラグインも開発されてますが、理想とするのは普通のコメントへの負担は「0」ですので、いろいろ妄想してみます。

2005-12-30 Fri 15:28

dj k!ng wrote...

文章力がなくて申し訳ないです. コードで示したほうが伝わりやすいですかね.

まず (X)HTML 側には,

<input type="hidden" name="foo" value="bar" />
<input type="checkbox" name="baz" value="on" />

という感じのものを書いておいて, プラグイン側では

if (postVar('foo') != 'bar') {
// エラー処理
}
if (postVar('baz') == 'on') {
// エラー処理
}

のように処理します. まず hidden フィールドが送られてきていないリクエスト (つまり一般的な BOT) を拒否し, 更にチェックボックスが 「チェックされている」 場合にも拒否します. フォームからコメントを投稿するユーザが特別な操作を行う必要はありません.

ただし, 上記の方法では BOT がチェックボックスを処理しない (POST する内容にチェックボックスが含まれない) 場合には, リクエストを拒否することができないため, 保険として更にもう一つチェックボックスを追加します. こちらは 「チェックされている場合のみコメントを許可」 します.

というわけで最終的に (X)HTML 側は,

<input type="hidden" name="foo" value="bar" />
<input type="checkbox" name="baz" id="baz" value="on" /><label for="baz">チェックしないでください</label>
<input type="checkbox" name="qux" id="qux" value="on" /><label for="qux">チェックしてください</label>

とし, プラグイン側では

if (postVar('foo') != 'bar') {
// エラー処理
}
if (postVar('baz') == 'on') {
// エラー処理
}
if (postVar('qux') != 'on') {
// エラー処理
}

のように処理します. こうするとコメントを投稿してくださる善意のユーザの方に余計な操作を要求してしまいますが, 何らかの代償はやむを得ないと思います :-(

# コメントを投稿するユーザが操作する必要のないチェックボックスは, CSS などで視覚上から隠しておけば, 投稿時の混乱は最低限に抑えられます.
# チェックボックスの checked 属性は, BOT が POST する内容として扱う目安になる可能性が高いので, 期待する入力値と反対に指定するか, 或いは指定しないほうが無難だと思います.

ということで伝わりましたでしょうか

2005-12-30 Fri 18:59

pushman wrote...

dj k!ng さん
こんにちは。

ご丁寧な解説、ありがとうございます。やっとこさ理解できました(笑)。

これだと「value」の値をどう処理するのか、スパム投稿する側で判断できなさそうですね。この改造を追加し、さらにいろいろ考えて、来年こそコメントスパム対策を完成させたいと思います。

2005-12-31 Sat 16:38





このページの先頭に戻る