Trackback : bot によるスパムへの対策を考える
この情報はかなり以前の Trackback モジュールについて書いたものです。
現時点での最新バージョンである Trackback 5.x-1.5 用に別モジュール化したものが Trackback UI モジュール | DRUPAL*DRUPAL でダウンロードできます。
[2008-04-11 追記]
モデレートを有効にしたり、IP フィルタリングなどを行なうことでもトラックバックスパムの対策にはなるが、bot によるトラックバックスパムに対しては Trackback Auto Discovery を無効にすることが効果的だということなので、それと合わせて、ページ上に表示される URL も変更することで、HTML ソースからトラックバック URL を自動取得できないようにするための方法。
trackback.module の function trackback_nodeapi 以下の case 'alter': 部分に修正を加える。
修正によって追加された箇所とコメントアウトされた部分を強調表示しています。
case 'alter':
if ($node->can_receive) {
$url = url('node/'. $node->nid, NULL, NULL, TRUE);
$tb_url = url('trackback/'. $node->nid, NULL, NULL, TRUE);
// $autodetect_comments .= "\n<!--\n";
// $autodetect_comments .= "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:trackback=\"http://madskills.com/public/xml/rss/module/trackback/\">\n";
// $autodetect_comments .= "<rdf:Description rdf:about=\"$url\" dc:identifier=\"$url\" dc:title=\"$node->title\" trackback:ping=\"$tb_url\" />\n";
// $autodetect_comments .= "</rdf:RDF>\n";
// $autodetect_comments .= "-->\n";
}
if (!(($_POST['op'] == t('Preview') || ($_POST['op'] == t('Submit') && form_get_errors())))) {
if ($teaser && $node->can_receive) {
// $node->teaser = $node->teaser . $autodetect_comments ."\n";
$node->teaser = $node->teaser . "\n";
}
else {
if ($node->can_receive) {
$tb_nospam = '-nospam';
$tb_message = t('Please transmit a trackback with "%nospam" deleted from the URL.', array('%nospam' => $tb_nospam));
// $node->body .= $autodetect_comments ."\n";
$node->body .= "\n";
$node->body .= theme('box', t('Trackback URL for this post:'), url('trackback/'. $node->nid . $tb_nospam . '<br />' . $tb_message, NULL, NULL, TRUE));
}
if ($node->can_receive && count($node->trackbacks_received)) {
foreach ($node->trackbacks_received as $tr) {
$trackbacks .= theme('trackback', $tr);
}
$node->body .= theme('trackbacks', $trackbacks);
}
}
}
break;上記の変更を行なうと、実際のトラックバック URL は http://example/trackback/xx ですが、ページに表示される URL は http://example.com/trackback/xx-nospam となります。
トラックバック URL に追加する文字列を変更したい場合は以下の 「-nospam」 の部分を変更してください。
「/nospam」 など、スラッシュから始まる文字列を設定した場合はトラックバックを送信できてしまいます。
$tb_nospam = '-nospam';また、トラックバック送信時に 「-nospam」 を URL から削除する必要があるということについてのメッセージを以下のように設定していますので(英文の内容は保障できませんが...)、この部分に日本語の翻訳を当てればトラックバック URL の下にメッセージが表示されます。
$tb_message = t('Please transmit a trackback with "%nospam" deleted from the URL.', array('%nospam' => $tb_nospam));
Trackback Auto Discovery の機能は大変便利な機能なのですが、HTML ソース中に <rdf:RDF...>~</rdf:RDF> を埋め込むため、この情報がトラックバックスパムに利用されるというデメリットも生まれているようです。
ただ、Trackback Auto Discovery に対応していない(ここでは無効にしている) CMS などからのトラックバックは受け付けないというシステムもあるようですので、無効にする場合には注意が必要です。
[ 参考 ]
Blog Developer's Cookbook : Trackback Auto Discovery
nlog(n): 迷惑トラックバックを減らす方法
Trackback Auto Discoveryを削除しない方がいい理由 | caramel*vanilla
トラックバック
トラックバックは承認後に表示されます。
URLから "-nospam" を削除してトラックバックを送信してください。
O829さんのサイトがトラックバックを導入されたようなので、テストも兼ねて言及します。 Trackback : bot によるスパムへの対策を考える トラックバックスパムは悩みの種ですね。一々 ...
コメント
0829さんのアイディアをそのままモジュールに改造しました。
2007-07-10(火) 18:58 - amayadori@drupa...いつもいつも、戯言におつきあいいただきまして、本当に感謝しております。
で、日ごろの感謝を込めて、0829さん提案のtrackbackモジュールのスパム対策の改造をまとめてモジュールに改造を加えて、プラスアルファしたモノを、手前のブログにて公表させていただきました。
改造ポイントはもう、0829さんのアイディアそのままで、トラックバックモジュールの設定画面において、改造して追加した機能のオンオフができるようにしてみました。
おまけに、モデレーションが必要なときは承認後に表示されますというメッセージが出るようにしました(笑)
ま、スパム対策なしの状態で使うとかっちょわるいんですけど(笑)ま、おまけなので(と言う言い訳)
あー、もう一つおまけと言ったら、URLに付けるまやかしのキーワードも管理画面で設定できるようにしてみました。
たまに変更するとスパム対策にいいかもしれません。
ランダムで・・・てのも考えたのですが、そこまで必要かな・・・と思ったので、今回は見送りました。
要望があったら考えると言うことでご勘弁いただく腹です(笑)
あと、スパム対策とはちょっと違いますが、トラックバックの内容を表示するときの文字数の変更。
アレも入れようかと思ったんですけど、ま、スパム対策がメインなので。と言う言い訳で今回はスルーしました(^_^;)
て言いますか、一山越えたのでとりあえず、いいやって気分になったというのはオフレコです(^_^;)
なんにしろ、毎度毎度、0829さんのアイディアをパクらせて頂きましたので、お許しください。
感謝とか言いながら感謝している行動ではないですね(笑)
0829さんが楽になれば!とか思って作ったんですけど、別に改造したモノが動いているからわざわざ変える必要はないんですよね、よく考えたら(笑)
と言うわけで、一応、ご報告まで。
お気に召さなかったら言ってください。闇に葬りますから(笑)
0829さんのところで配布ってのでもいいですよ、アイディアは0829さんですから(^_^)b
ま、とりあえず、いつもありがとうございます<(_ _)>
ちょっと恥ずかしい気もしますけど...
2007-07-10(火) 21:02 - 0829プライマリリンクのタブには 「TIPS」 とかエラそうに書いているのですが、実は、自分が改変したところを忘れないように...というメモ程度の内容なんですよね。
なので、あまり大きな声で紹介していただくと恥ずかしい気もしますが、もしも必要な方がいらっしゃれば、結構こちょこちょ変更箇所がありますし、自分で改変するより簡単でいいかもしれませんね。
コードを記載するだけでなく、同時にダウンロードできる形で配布というのも親切な方法ですよね。(面倒なので自分には期待できないですけど...)
私のアイデア... は、他のサイトで行われていた対策の寄せ集めですから、何のオリジナリティもないですが、採用していただいてありがとうございます。
開発も公開も誰にも止めることはできないはずですから、気にしないでください。 そんなこと、更々考えてないですしね。
それを言われると(笑)
2007-07-11(水) 10:12 - amayadori@drupa...いや、0829@drupal.orgさんにそれを言われると、ワタシなんて立つ瀬が無くなってしまいます(苦笑)
0829@drupal.orgさんは、曲がりなりにもキチンとそれっぽい文体で書いて居るではないですか。
ワタシなんて、口語体だのフェースマークだのあんな感じですから(笑)はっきり言って情報を記述するための文体ではないので(笑)読む人が大変だと思っています(笑)正直に言って、ワタシが改造して公開しているモノなんか、0829@drupal.orgさんに、解説ページを記述してもらいたいくらいです(笑)
まー、あれですね。文体というのはそうそうなかなか変えられるモノではないので、あまやどりはあー言うモンだということであきらめて頂くしかないかと(笑)
Drupalに限らないことですが、ネット上のアプリケーションって、スクリプト言語で動くモノがほとんどなので、改造とか言うモノはそこら中にあふれて居るんですよね。
で、改造ポイントなんかをソースとして貼り付けていたりします。
改造を繰り返しているファイルなんかだと、ポイントだけソース公開してくれた方がありがたかったりしますけど、ワタシのようにアルファベット苦手な人間にとってはソースファイルをいじることは恐怖に値します(笑)
で、得てして動かなくなったりします(笑)
だから、ソースで公開するのと、ファイルで添付するの、両方ができればいいなと思っています。
ま、うちの場合はソースで公開してませんけど(笑)
1箇所で済めばソース公開でいいんですけど、何カ所も手を入れなければいけないとなるとそっちの方が面倒です。
それに、ワタシの場合は、ロジック上では合理化するように努めてますけど、ソース上では合理化できていない(考えていない)場合の方がほとんどなので(笑)ソースをページに貼る方が恥ずかしかったりします(笑)
ま、そもそも、開発者ではないのでそう言うのが苦手だったりしますので、ページ上では使い方とかを説明して、使って納得してください(笑)というスタンスでやってます(笑)
randquestとか、trackback-0829とかの解説ページ作ってください(笑)
いや、その気になったらですけど(笑)ワタシのと差し替えます(ヲイ)
文体だけですから...
2007-07-11(水) 13:18 - 0829もともとフェースマークなどを使っていなかったというだけで、文章中には 「おそらく...」 とか 「...らしい」 とか 「...のようです」 とか 「...かもしれません」 とか、かなり憶測を含んだ内容を記述していますからね。 気にして読むと、ホントは何も明確になってないことがバレてしまいます。
実際に試した内容に基づいて記述するというルールだけは守るように心掛けていますけど、どのくらい試したかのレベルはまちまちですから...そのあたりもアヤシイものです。
これはもう、よくあることですよね。 何が悪いのかわからないけど、よく見ると { とか ; とかが抜けてるだけだったり。
自分で記述しているときに { を忘れることは少ないですが(自動補完してくれるので)、改変しているときにはやっちゃいます。
で、いろいろやってるうちにわからなくなったりして、一から仕切り直し...なんてことも少なくないです。
改造版(モジュール名が drupal.org のプロジェクトと重複しているもの)はどういう風に取り扱うかをまだ考えていないのですが、Captchar とか randquest はオリジナルのモジュールというカタチになっているので、開発が落ち着かれたようなところでレポートしようかなと思っていたんです。
どんどん進化していたのと、私がレポートするまでもなく詳細な解説がされているということとで、なんとなくタイミングを逃してしまっていました。 スミマセン。
変更と修正
2007-05-20(日) 22:48 - 0829bot によるトラックバックスパムに向けた対策としては、Trackback Auto Discovery だけでなく、表示されるトラックバック URL の一部を変更する内容も合わせて記載した方がよいと思いましたので、内容を追記し、タイトルも修正させていただきました。
あれ?実装はしてませんか?
2007-05-20(日) 02:29 - amayadori@drupa...改造手法は提示していただいてますが、実装はまだしてませんか?(笑)
参考リンク先も読ませていただいて、う~むと思いましたね。
結局、スパマーが悪いのは確かだけど、片側通行でもリンクを受け入れる仕様そのものの問題というような気がしてきました。
ワタシは、基本的にトラックバックよりもコメントを残してくれる方がありがたいと思う人間なので、どうしてもトラックバックが必要っ!というほどの人間ではないのです(^-^;△フキフキ
そもそも、トラックバックの恩恵をあまり理解していないところに問題があるんだけど(笑)
トラックバックの価値って、なんでしょう?(^-^;△フキフキ
色々語っているサイトを読んでもイマイチ釈然としない(ワタシが納得できていない)
[追伸]今、投稿ボタン押したらホワイトスクリーンが帰ってきました(^-^;△フキフキ たまたまですかね?
申し訳ないです...
2007-05-20(日) 12:30 - 0829一番実装したかったのがモジュールページだったのでですが、トラックバックを実装しましたという告知の後に、そのままではモジュールページに表示されないことに気付いて Contemplate で表示をコントロールできるように修正したのですが、そうすると今度は、他のページでも Contemplate で表示をコントロールしないければならないようなので、どうしようかな...と思いつつ、土日はユーザ数が少ないのでいいかな?と後回しにしてしまっていました。スミマセン。
Trackaback モジュール自体は Trackback Auto Discovery は無効にして導入しています。
投稿ボタンを押したらホワイトスクリーンって、よくありません? 私のサイトに限らず、プレビューでもよく出会います。
それでリロードして、amayadori さんのサイトでも二重投稿してしまったことがあるので、結構普通に起こることだと思っていました。
私のタイミングが常に悪いのかもしれないですけど...
最近、googole.com をリファラと偽ったコメントのプレビューアクセスが、前のどこかの教育機関のときの5倍以上あるので(ここ2週間で7,000を超えていて、さらに増加傾向...)、それで負担がかかっているのも原因かもしれませんね。
そのアクセス数と同じだけのトラックバックスパムがあったら管理しきれないな...ということと、トラックバックの必要性をイマイチ感じていないのとで、トラックバックの導入は悩んでいたんですよね。
そうなんですよね・・・
2007-05-20(日) 16:19 - amayadori@drupa...そうなんですよね。イマイチ、必要性を感じないんですよね。
なんなんでしょうね。
という訳で、気にしないでください。
ホワイトスクリーンは意外なほどあまり出くわしていないですね。ま、珍しくないと言えば、珍しくないのでこれもまた気にしないでください。
サイトの構成を変えたりするとそのタイミングで置きやすいのでおやっ?と思っただけですので。
うちは、ゲストはコメントいれれないので、もっぱらログインのログが多いですね。多分、認証を通せないんだと思いますけどね。
トラックバックはワタシもまだ決めていません。今入れてみてますが、取り外す可能性も低くないです。
それこそ、デメリットは考えられるけど、メリットはあまり考えられないですね。