以前のMTEntryTrackbackDataの削除後、何日かはスパムが無くなったのだが、しばらくすると再び舞い込むようになってしまった。
最近はスパマーの方も進化してるようで、スクリプトのファイル名を変更する程度では阻止できないようだ。
まぁスパムは来てもフィルターでJunk行きになるので基本的にはあまり問題無いのだが、このJunk分を削除しているとまたDBファイルの肥大化にも繋がってしまうし、そもそもスパムが来る事自体が気持ち悪いので何とかしたい。
ということで、その後ももっといい手は無いものかと模索していました。
多分スパマーの多くはHTML中からそれらしいURLを拾って利用しているものという推測から、対策のポイントとして意識したのはHTMLソース中にプレーンなPing URLを晒さないようにする事。
本当はスクリプトを使用せずに何とかならないかと思ったんだけど、ちょっと良い方法が思いつきません。
まぁどうせ他の部分でも散々JavaScript使ってるし、今さらこだわってもしょうがないかと開き直って(^^;)、とりあえずスクリプトとの組み合わせで以下のような案を考えました。
まずJavaScriptで次の関数を用意します。
function makePURL(id)
{
$buf = "<$MTCGIPath$>";
$buf += "<$MTTrackbackScript$>";
$buf += "/";
$buf += id;
document.F1.U1.value = $buf;
document.F1.U1.select();
}
テンプレートタグを使用しているので、これを適当なテンプレートの中に追加する必要があります。
MTのv3.3以降(かな?)では、標準でサイト用スクリプトのテンプレート(mt-site.js)があるので、その中に追加するのが良いでしょう。
無ければ自分で新しくスクリプトファイルを生成するテンプレートを作成します。(その方法はここでは省略します。分からない場合はヘルプや他サイトで調べてください ^^;)
次に個別エントリー(Individual Entry)アーカイブ用のテンプレートの修正。
まずは<head>~<head>部分に上記関数を含むスクリプトファイルへの参照(<script type="text/javascript" src="~.js"></script>)を追加します。
あとはトラックバックURLを表示している部分を上記の関数を利用するように変更します。
標準だと
となっている部分を以下のように置き換えます。
<script type="text/javascript">
document.write('<form name="F1">');
document.write('<input type="button" style="width:25em;" value="このボタンを押すと下にトラックバックURLが表示されます" onclick="makePURL(');
document.write("'<$MTEntryTrackbackID$>'");
document.write(');"><br />');
document.write('<input name="U1" type="text" style="width:30em;" value="">');
document.write('</form>');
</script>
<noscript>
<span class="warning">※JavaScriptが無効だとトラックバックURLが表示できません。</span><br />
</noscript>
文言や体裁等の細かいは部分は適当に好きなように変更してください。(^^;)
formのname属性“F1”やinputのname属性“U1”を変えたい時は、合わせて関数makePURL()中の“F1”や“U1”の部分も変更してくださいね。
再構築し直すと、このボタンを押すと下にトラックバックURLが表示されますというボタンを押す事で、そのエントリーのPing IDを引数として関数makePURL()が実行され、その中でPing URLが生成されて下のText入力欄に表示され、ついでに範囲選択されるはずです。
これならHTMLソース中にPing URLは含まれず、また人手による操作が必要なので単純なクローラーではURLが抽出できないはず。そう期待する!(笑)
てことで、またしばらく様子見です。
まにてん堂 on 2007年5月31日 15:31
トラックバックスパム無くなった?
先日の対策から一週間経つが、とりあえずその間においては、すっかりスパムが見られなくなったようだ。 まぁもう少し様子見てみないと、忘れた頃にまた復活してたり…