青柳臣一 blog : .NET や C# がメインの blog

.NET や C# がメインの blog
投稿数 - 548, コメント - 259, トラックバック - 205

トラックバックスパム

最近、トラックバックによるスパムがずいぶん来るようになりました。けど、そのほとんどは .Text が自動的にはじいてくれてます。と言うのも、.Text は相手先にちゃんと自分へのリンクがあるか確認してるからです。たとえば、こちらの記事 A に対してトラックバックが送られてきたとします。このとき .Text はトラックバック送信元 (この URL はトラックバック自身に含まれている) の記事を取得し、その記事のなかに A へのリンクがあるかを確認しています。きちんとリンクが見つかればトラックバックとして登録しますが、見つからなかった場合はエラーを返してトラックバックとして受け付けません。この場合、.Text 上はどこにも記録は残りませんから、IIS のアクセスログを見たりとかしないとそういうトラックバックが来ていたこと自体わかりません。で、最近来ているトラックバックスパムもこの仕組みのおかげではじかれてました。

んが、存在しない記事に対するトラックバックが受け付けられてました。トラックバックスパムは機械的に URL を作ってるのか存在しない記事番号に対しても送られてきたりします。この場合も上記のようなチェックはしているんですが、ちょっとしたコードの問題で受け付けられてしまいます。まぁ、受け付けられても記事自体が存在しないわけですから、Web 上のどこにも表示はされません。けど、データベースには格納されてしまいますし、管理者の Feedback ページでは表示されますからうっとおしいのは確かです。

というわけで、存在しない記事へのトラックバックをエラーとするように修正。
Dottext.Framework\Tracking\TrackBackHandler.cs の 98行目くらいに

Entry trackedEntry = Entries.GetEntry(postId,true);
if (trackedEntry == null)
{
    trackbackResponse (context, 1, "EntryID is invalid or missing" ) ;
}

というように青字の部分を追加してビルドすれば OK です。

投稿日時 : 2005年6月13日 10:25

トラックバックは下記のURLにpingを送信してください。
TrackBack URL: http://www.divakk.co.jp/blog/aoyagi/services/trackbacks/4158.aspx

フィードバック

# 青柳さんがまた.Textの不具合を修正

トラックバックスパム
いつも精力的で、とてもありがたいです。さっそくうちにも反映させます。ありがとうございます。
2005/06/13 12:53 | 安藤@大分のBlog (トラックバック)

# re: トラックバックスパム

コメントの表示先を見つけられなくて、不思議に思っていたんですよね。
早速対応したいと思います。

ありがとうございます。
2005/06/13 17:40 | 石野 光仁

# re: トラックバックスパム

 余計なお世話であることは重々承知しておりますが、上記ですと、スパム以外もはじかれちゃうことがあるようです。
 当記事を拝見してから、自Blog(WordPress0.72, PHP)でも、trackback送信元を取得するように変更したのですが、例えば、gooブログからtrackbackされた場合などは、trackbackを受け取ったタイミングではまだ記事ページの生成が完了しておらず、自サイトへのリンクがないことになってしまいました。
# どっちがわるいかっちゅうと、gooブログの実装なんでしょうけど…(^^;;
一応、ご報告まで。
2005/06/14 10:57 | じょもら

# re: トラックバックスパム

> trackbackを受け取ったタイミングではまだ記事ページの生成が完了しておらず

情報ありがとうございます。
うーん、やっぱりそういうことがありましたか。。。困ったなぁ。
でも、「リンク元を確認する」 というのは、 .Text のもともとの仕様なので、.Text を
使っているサイトはみんな Goo からのトラックバックは受けられないということですね(^^;
あと、ソースを見る限り Community Server 1.0 もほとんど同じ実装のようです
ので CS でも Goo からのトラックバックは受けられないような気がします。

けど、(リンク元を確認しないようにするという以外に) いい対処法を思いつかないなぁ。
2005/06/14 13:38 | 青柳 臣一

# re: トラックバックスパム

青柳さま、こんにちは。先日はAuto-Discoveryの件、お世話になりました。
結局私もソースを入手して、.Textをちょこちょこといじってビルドして動かしています。

実は、私も該当の箇所に手を加えていました。
でも、このようにしてました...。

Entry trackedEntry = Entries.GetEntry(postId,true);

//if (trackedEntry != null &&
//    ! Verifier.SourceContainsTarget(url, trackedEntry.Link, out pageTitle))
//{
//    trackbackResponse (
//         context, 2, "Sorry couldn't find a relevant link in " + url ) ;
//}

つまり、トラックバック元のURLの存在をチェックすることと、トラックバック元にこちらのURLがちゃんと入っているかどうか、です。
.Textのつくりだと、TB元に自分の記事が入ってないと受け付けませんよね?
それでは、厳しいかと思ったので...。
ですが、TBスパムだけまずは防ぐなら、上記の青柳さまのような修正でOKなのかな、と思いました。
またまた参考にさせていただきました。
2005/06/17 13:27 | KOAKI

# re: トラックバックスパム

書き込んでしまってから気がつきました。
つまり、トラックバック元のURLの存在をチェックすることと、トラックバック元にこちらのURLがちゃんと入っているかどうか、というところを「コメントアウトした」ですね。
恐れ入ります。。。

2005/06/17 13:28 | KOAKI

# DotTextブログの立上げの際に参考にさせて頂いた記事

DotTextブログの立上げの際に参考にさせて頂いた記事
2006/05/12 22:46 | あろい広場 (トラックバック)

コメントの投稿

タイトル  
名前  
URL
コメント   
Protected by Clearscreen.SharpHIPこの絵に表示されている文字列を入力してください (半角で4文字です):