CAPTCHAに関する記事。
- Radium Software Development: Breaking Visual CAPTCHAs
- 高木浩光@自宅の日記 - 飾りじゃないのよCAPTCHAは
- PHPで使えるCAPTCHA画像作成ライブラリまとめ:phpspot開発日誌
CAPTCHA破りもかなりできるらしい。
アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなくて片仮名を使ったらどうだろう、と思ってphpspotでお勧めされていたKCAPTCHAのコードを拝見しつつつくってみました。
デモは以下。LGPLでPHPのコードごと見れます。
Japanese KATAKANA CAPTCHA test

参考にしたKCAPTCHAのコードはphpclasses.orgでユーザ登録しないとダウンロードできません。思ったより短いコードで、コアはたったの200行。
- アルファベットをPNGから切り出している
- o=0, 1=lなど似た文字はあらかじめ排除している
- rnとrmのように隣り合うと識別しにくくなる文字列を排除している
- 文字を歪めるアルゴリズムはsinカーブを描くようにごりごりimagesetpixelでやっている模様
カタカナにするにあたって、特にアルファベットと変わる点はなく同じようにツとシのように識別しづらいものは排除しました。ただ、隣り合うと識別しづらくなる文字の組み合わせがあまり思い付かなかったのでそちらは実装していません。ノとレとか?あとユーザ入力と生成された文字列の比較時に小さいャとヤの区別を付けない方がいいかもしれません。
また、昔から好きなGrayGraphicsのフリーフォントを使わせていただきました。CAPTCHAに使っていいかライセンス的によくわからないので商用利用の際は注意が必要かもしれません。
今回は1つのフォントしか使っていませんが、破られないように強化するならKCAPTCHAのように複数のフォントをランダムに使った方がベターでしょう。文字数も固定長にしない方がいい。ただそれもCAPTCHA破りの汎用性によっては無意味なのかもしれません。現在ある最強のCAPTCHA破りアルゴリズムだとカタカナに対応するためのデータを学習すれば簡単に破れるんでしょうか。
なおPNGではなくTTFを使ったので動作環境にはGDとfreetypeが必要になります。一応PHP5用。ちょっと変えればPHP4でも動くはずです。

カタカナでCAPTCHAをつくるPHPコード
4 Comments
»
コメントはお気軽にどうぞ



https://member.gungho.jp/front/register/entry.aspx
ひらがなの画像認証なんかもたまたま見かけました。PHP ではないですが…。
Comment by 奥村隆一 — 2006年11月27日 @ 01:09
情報ありがとうございます。
オープンソースになっていないだけで、カタカナも実装例はありそうですね。
子供向けだと確かにアルファベットは難しい。GungHoの場合、10歳では他の文章中の漢字の方が難しいかもしれませんが。
Comment by funaki — 2006年11月27日 @ 08:59
[PHP]カタカナCAPTCHA…
おおーっ!カタカナ知ってる人限定ですが、これ良いですね。 CAPTCHA破りもかなりできるらしい。 アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなく…
Trackback by Do You PHP はてな — 2006年11月27日 @ 16:23
これはなかなかよさそうですね。
しかし、テストページでは「ア」と「マ」の判別が難しかったです。
また、少しはみ出して見えない文字もありました。
Comment by 八環 — 2007年2月19日 @ 00:55