blosxom starter kit #20
Posted at 2004-08-08T16:10:00+09:00 in Blosxom
TrackBackスパムへだけ対処するのは片手落ちなので、コメントスパムへの対処もしようとコードを書いてみました。大体うちで利用している対策と同じコードなので、問題はないと思いますが、環境(blosxom starter kitの利用の仕方と言った方が正確)に依存しそうなので、とりあえずのところは差し替えるためのwritebackのソースのみの公開にしておきます。
利用には上記リンク先のファイルを名前を付けて保存し、writebackとリネームした上で既に利用しているblosxom starter kitのwritebackを上書きしてください。既に利用しているwritebackのバックアップも忘れずに。
具体的な対策は以下になります(コードでは100-131行目)。
- 特定のURL以外のリファラを送信してきたコメントの投稿は拒否
- リファラを送信してきたTrackBackは拒否
- Mozilla/で始まるUser Agent名を送信してきたTrackBackは拒否
- ASCIIのみのコメントまたはTrackBackは拒否
1番目は、いわゆる掲示板CGIでは一般的に対処されているものです。この対策により通常はPermanent linkからフォームを埋めて投稿しない限り投稿できなくなるはずです。まぁリファラは偽装できるものなのですけどね。チェック方法はリファラを取得し、それがblosxom starter kitで採用されているpermanent linkと一致するかどうかというものですので、blosxom starter kitを改造し、permanent linkのflavour名を変更していたりするとうまく動かずあらゆるコメントが投稿できなくなるかもしれません。
2番目と3番目は、この前更新したTrackBackの脆弱性に対する対応で、1.0.2以降には導入されています。
4番目は、スパムの多くがASCIIのみで投稿されることを受けた対策で、なかなか威力を発揮します。最近はロシア語とか韓国語、中国語などのスパムもあるようでこれだけでOKというわけでもないわけですが。「ひらがなを含まないコメントを拒否」というアプローチの方が強力ではあると思いますが、環境を選ぶ実装しか思いつかなかったので、とりあえずはASCIIのみのものだけ拒否するようにしました。
なお、このwritebackはblosxom starter kit用のものなので、オリジナルのblosxomにそのまま導入することは出来ません。ただし、対策のコード自体はblosxom starter kitに依存するわけではないので、100-131行目をコピーし、うまいこと書き換えてやれば、オリジナルのwritebackに同じ対策を導入することは可能ですので、不可能ではありません。
バグ報告や機能改善要望、機能追加要望は、このエントリへのコメントやBBS、MLなどでお気軽にどうぞ。
追記@2004/08/09
それぞれのスパム対策は、設定で有効・無効を切り替えられるようにします。一週間くらいいろいろチェックしながら問題がなさそうだったら1.1として出そうかなとか。
追記@2004/08/11
特にコード的な問題なさそうですが、対策方法に付随して利用上に問題がありそうなので、
- 全ての対策を設定で有効・無効を切り替えられるようにする
- 特定のURL以外のリファラを送信してきたコメントの投稿の拒否はデフォルトでOFF
- リファラを送信してきたTrackBackの拒否及びMozilla/で始まるUser Agent名を送信してきたTrackBackの拒否はデフォルトでOFF
- ASCIIのみのコメントまたはTrackBackの拒否はデフォルトでON
という感じにして、1.1に更新することに決めました。現状ではスパムと思しきコメントまたはTrackBackの8割程度はASCIIチェックのみで弾けているような気がするので、これで良いかなと結論付けました。
連続投稿制限は、同じ内容のTrackBackを、同じblogの別のエントリに送信するケースとかがあるので、どう実装しようか悩み中。コメントの連族投稿制限については普通に対策できるんですけど。
Weblog archives
by Month
- October, 2006 (9)
- September, 2006 (23)
- August, 2006 (31)
- July, 2006 (8)
- October, 2005 (13)
- September, 2005 (24)
- August, 2005 (26)
- July, 2005 (2)
- June, 2005 (2)
- May, 2005 (13)
- April, 2005 (30)
- March, 2005 (33)
- February, 2005 (13)
- January, 2005 (10)
- December, 2004 (28)
- November, 2004 (27)
- October, 2004 (25)
- September, 2004 (38)
- August, 2004 (52)
- July, 2004 (45)
- June, 2004 (41)
- May, 2004 (48)
- April, 2004 (36)
- March, 2004 (51)
- February, 2004 (55)
- January, 2004 (63)
- December, 2003 (46)
- November, 2003 (63)
- October, 2003 (92)
- September, 2003 (61)
- August, 2003 (93)
- July, 2003 (57)
- May, 2003 (5)
- April, 2003 (35)
- March, 2003 (35)
- February, 2003 (37)
- January, 2003 (62)
- December, 2002 (32)
This page was last modified on 2006-08-22T16:06:09+09:00 (in 0.194 secs).