前回のDay4では、本文解析機能を実装し、
- 危険ワードの検出
- スコア化
- 危険度判定
- GUIへの解析結果表示
まで進めることができた。
これでようやく、
「メールを読むツール」
から、
「怪しいメールを判定するツール」
らしくなってきた気がする。
ただ、実際に使ってみると、すぐに新しい問題が出てきた。
それが、
ルールの追加が面倒問題
である。
例えば、
「iCloud系のメールも危険判定にしたい」
と思ったら、プログラムを開いてキーワードを追加し、保存して、再起動する必要がある。
新しい迷惑メールが来るたびにこれを繰り返すのは、さすがに面倒だ。
迷惑メールの手口はどんどん変わる。
こちらも、その都度柔軟に対応できないと意味がない。
そこで今回は、
GUIから危険ワードを登録できるようにしてみた。
さらに、登録した内容を rules.json として保存し、次回起動時にも引き継げるようにしている。
つまり今回から、このツールは少しずつ、
「プログラムを書き換えて使うもの」
から、
「使いながら自分用に育てていくもの」
へ進化し始める。
正直、この辺りから急に“自分専用ツールを作っている感”が出てきて、開発がかなり楽しくなってきた。
固定ルール方式の限界
Day4の時点では、危険ワードやサービス名をプログラム内に直接書いていた。
例えば、
DANGER_KEYWORDS = [
"重要",
"お支払いを完了してください",
"支払い方法を更新",
"本人確認",
"利用制限",
]
というような形だ。
最初の実験としては、これで十分だった。
とりあえず動かす。
とりあえず検出する。
とりあえずスコアを出す。
その段階では、コードに直接書いてしまう方が早い。
ただ、使い始めるとすぐに分かった。
これは運用が面倒だ。
例えば、新しく、
iCloud
iCloud+
Apple ID
を強めに判定したいと思った時、毎回コードを書き換える必要がある。
さらに今後、
- 新しい詐欺メールの文言
- 新しい偽装サービス名
- 差出人に含まれる怪しい単語
- 件名に含まれる焦らせワード
を追加していくことを考えると、コード直書きはかなり不便だ。
このツールは、迷惑メールのパターンに合わせて少しずつ育てていく必要がある。
それなら、危険ワードはプログラム内に固定するのではなく、外部ファイルに保存した方がいい。
ということで今回は、手動登録したルールを rules.json に保存する方式へ進めることにした。
GUIから危険ワードを登録できるようにした
今回追加したのは、GUI上から危険ワードを登録する機能だ。
登録できる種類は、
- 差出人
- 件名
- 本文
の3つに分けた。
例えば、
差出人:icloud
件名:【重要】
本文:お支払いを完了してください
というように、どこに含まれていたら怪しいと判断するかを分けて登録できる。
これは地味に大事だと思う。
同じ単語でも、差出人に含まれている場合と、本文に含まれている場合では怪しさが違う。
例えば icloud という単語が本文に少し出てくるだけならまだしも、差出人や件名に出てくるなら警戒度は高くていい。
なので今回は、
- 差出人に一致したら高めに加点
- 件名に一致したら中程度に加点
- 本文に一致したら少し加点
という方向で考えている。
GUIには、登録種別を選ぶ欄とキーワード入力欄を用意した。
キーワードを入力して追加ボタンを押すだけで、ルールとして登録される。
これで、新しい迷惑メールを見つけた時に、
「この単語、次から拾いたいな」
と思ったら、その場で登録できるようになった。
コードを書き換えなくていい。
これだけでも、かなり運用しやすくなったと思う。