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 によるスパムへの対策を考える トラックバックスパムは悩みの種ですね。一々 ...