: O. Yuanying

Trac でチケットへのスパムコメントを削除する

自分のプロジェクト管理用 tracSpamFilterを導入してどうにかスパムチケットとお別れしたとおもったのもつかの間、 やつらは別のところから侵入してきた。

スパムチケット

spam01.png

たまに侵入してくるスパムチケットはまだいい。 こんな感じで Timeline をチェックすればスパムっぽいチケットが切られているのがすぐにわかるので、


Trac [/Users/Shared/Services/rana]> ticket remove 38
Ticket 38 and all associated data removed.
Trac [/Users/Shared/Services/rana]> ticket remove 39
Ticket 39 and all associated data removed.

trac-admin から該当のチケットを削除してやれば良い。

チケットへのスパムコメント

つーか、このエントリ書いてる間にも投稿されてた。腹立たしい!

あまりにも腹立たしくてスクリーンショット撮るのも忘れてしまったが、 最近はすでに切られているチケットへのコメントとしてスパムがポストされる。

これの何が腹立たしいって、実際に該当するチケットを見ないとスパムコメントが投稿されてるかわからないってところだ。

trac-admin からはチケットへのコメントを削除する手段が用意されていないので(0.10.x)、 データベースから直接、該当のスパムコメントを削除する。

[yuanying@Kohrin] ~
$ sudo sqlite3 /path/to/trac/db/trac.db

使ってるデータベースはデフォルトなので、sqliteを起動し、

sqlite> .tables
attachment         node_change        session_attribute  ticket_change    
auth_cookie        permission         spamfilter_bayes   ticket_custom    
component          report             spamfilter_log     version          
enum               revision           system             wiki             
milestone          session            ticket           
sqlite>

テーブルを確認。

チケットへのコメントは ticket_change で管理してるっぽい。

sqlite> .schema ticket_change
CREATE TABLE ticket_change (
    ticket integer,
    time integer,
    author text,
    field text,
    oldvalue text,
    newvalue text,
    UNIQUE (ticket,time,field)
);
CREATE INDEX ticket_change_ticket_idx ON ticket_change (ticket);
CREATE INDEX ticket_change_time_idx ON ticket_change (time);
sqlite>

スキーマ確認。

sqlite> delete from ticket_change where ticket=6 and time=1207615482;

該当のコメントを削除してやる。