雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2008-06-01 [長年日記]

Hikiで言及のないTrackbackを拒否する

Hikiを使って公開しているページに対するTrachBack SPAMがひどいので、tDiaryのソースなどを参考にしつつ、言及のないTrackBackをはじくよう設定。tDiaryのspamlinkcheck.rbをベースに「言及リンク」よりは条件を緩めて、ページへのリンク、ページのタイトル、筆者(私)の名前、サイトのタイトルのいずれかがTrackBack元のページに含まれていれば受け付けるようにしました。

まずmisc/plugin/trackback.rb にres_error()メソッドを追加

def res_error( msg )
response = <<-END
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>#{msg}</message>
</response>
END
head = {
'type' => 'text/xml',
'Vary' => 'User-Agent'
}
head['Content-Length'] = response.size.to_s
head['Pragma'] = 'no-cache'
head['Cache-Control'] = 'no-cache'
print @cgi.header( head )
print response
end

次に、同じファイルの trackback_post メソッド内に以下のソースを追加。

  begin
chkf = false
src_uri = url.dup.untaint
allow_keys = [ "#{@conf.index_url}?#{@page.escape}", utf8_to_euc(@db.get_attribute(@page, :title)), @conf.author_name, @conf.site_name ]

Timeout::timeout( 10 ) do
require 'open-uri'
open( src_uri ) do |f|
src_data = f.read( 100 * 1024 ).to_euc
allow_keys.each do |k|
if src_data.include?(k)
chkf = true
break
end
end
end
end

unless chkf
res_error("Sorry, Your trackback has refused by SPAM filter. Please contact me if you are not a SPAMMER.\n")
return
end
rescue
res_error("Sorry, something wrong and I cannot accept your trackback.\n")
return
end

allow_keysに要素を増やせばTrackBackを受け付ける条件をより緩和できます。

しばらくこれで様子見。