カテゴリー
技術者と英語

問題のあるユーザー名登録を防ぐ英語圏のワードフィルタの実例

小片コード共有サービスの pastebin に貼られ、Hacker News で ゲーム配信サービス大手のTwitch がユーザー登録時に弾いているフィルタ部分のソースコードだ、との主張で紹介されている SQL コードは、問題のある単語をチェックするためのコードです。

CREATE OR REPLACE FUNCTION is_terrorism (VARCHAR) RETURNS BOOLEAN STABLE AS $$
 SELECT replace($1,'_','') LIKE '%did911%'
     OR replace($1,'_','') LIKE '%support%isis%'
     OR replace($1,'_','') LIKE '%isis%support%'
     OR replace($1,'_','') LIKE '%join%isis%'
     OR replace($1,'_','') LIKE '%isismember%'
$$ LANGUAGE SQL;


CREATE OR REPLACE FUNCTION is_child_exploitation (VARCHAR) RETURNS BOOLEAN STABLE AS $$
 SELECT replace($1,'_','') SIMILAR TO '%ped(o|0)(f|ph)(i|1)le%'
     OR replace($1,'_','') SIMILAR TO '%isa%ped(o|0)%'

SQL 文としてジャンルごとに定義されている関数は、イスラム国(ISIS)への参加を呼び掛ける文字列や、児童ポルノや人種差別・性犯罪やドラッグに関する英単語が含まれる文字列で True を返すようです。

また、単純な単語の一致だけではなく、それら英単語の一部の文字を数字に置き換えるなどしてチェックをすり抜けようとするものもある程度見つけるようになっていました。a を 4 にしたり、 e を3 にしたりという leetspeak と言われる変換ですね。

ユーザー登録のできるwebサービスでは大なり小なりこのようなフィルタリングを行っているとは思います。コードが Hacker News の投稿者の言う通り Twitch で使われているものかはわかりませんが、この SQL で引っかかるような文字列をいくつか入れてユーザー登録しようとしたら、エラーは出ますね。実際には JavaScript レベルでエラーにしているようなので、SQL 文のフィルタは誰かが再現したものかもしれませんし、あるいはそれぞれが同じネタ元のフィルタを参照して作られたものかもしれません。

各関数の名前からどのような性格の「悪い単語」を排除しようとしてるのかがわかります。

関数名 意味
is_terrorism テロ
is_child_exploitation 児童搾取
is_hateful ヘイト
is_harassment ハラスメント
is_violence 暴力
is_tragedy 悲劇
is_selfharm 自傷
is_sexual 性的
is_drugs ドラッグ
is_derogatory 軽蔑的
is_profanity 淫ら
is_blasphemy 冒涜
is_marijuana 大麻
is_sex_insult 性的侮辱

チェックされる単語の一つ一つは、多くが理解して気持ちのよい単語とは言えません。細かく紹介はしませんが、英語での罵倒や悪口の勉強がしたければいい教材となるやもしれません。

ワードフィルタは false positive であるスカンソープ問題も引き起こすので万能の解決法ではありませんが、海外向けにユーザー登録のあるサービスを公開する場合は対策の一つとしてこのようなフィルタを用意することも考えておかないといけないのでしょう。

カテゴリー
ネットのサービス

フェイスブックやツイッターでの政治的なコメントを全部ネコ画像に置き換えるChromeブラウザ拡張Unpolitic.me

Facebookに流れてくる赤ちゃん画像を全部ネコ画像に差し替えるChrome拡張 Unbaby.me の作者が今回作ったのは、赤ん坊ではなく政治に関するコメントを見えなくするChrome拡張 Unpolitic.me

この拡張を入れた状態でFacebookを閲覧し、そこに政治関連のキーワードがあると、こんな風に猫の画像が表示されます。

前回の赤ちゃんブロックと同じアイデアではありますが。アメリカの大統領選が間近なので、さぞかしアメリカ人のFacebookやTwitterでは、やれオバマがとかロムニーがというコメントが飛び交っているんでしょうね。

ツイッター上ではこんな風になります。つぶやき元のユーザー名が”Politics Blocked”(政治はブロック)という名前になり、「代わりに動物の写真でも見ようよ」とリンク。

ブロックされた元の政治的なツイートをチェックしたければ、 @undo をクリックすると、元のツイートが表示されます。

Chrome拡張のオプション画面で、どういうキーワードを「政治的」とみなすかがカスタマイズできます。日本語でも動いたので、日本語のそういう単語を登録しておけば、全部ネコ画像に置き換わって表示されるでしょう。

もちろん、ネコじゃなくて犬がいい人は、犬の画像が出てくるRSSフィードを登録することで、差し替える画像を犬にできます。

つまり、「政治をネコに」と言っていますが、好きなキーワードをブロックし、好きな画像で差し替えられる汎用的なブラウザ拡張でもあるということです。

このChrome拡張、既に1万人以上がインストールしています。ソーシャルメディアで選挙や支持政党の話は見たくない、という人や、友達ではあるけど「この話題は聞きたくないなあ」という友人がいる方は試してみてはどうでしょうか。

via Google Chrome Extension Blocks Your Idiot Friends' Political Rants From Your Facebook And Twitter Feed | Geekologie