» home

カタカナでCAPTCHAをつくるPHPコード

CAPTCHAに関する記事。

CAPTCHA破りもかなりできるらしい。
アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなくて片仮名を使ったらどうだろう、と思ってphpspotでお勧めされていたKCAPTCHAのコードを拝見しつつつくってみました。

デモは以下。LGPLでPHPのコードごと見れます。

Japanese KATAKANA CAPTCHA test
katakana_captcha_img.png

参考にしたKCAPTCHAのコードはphpclasses.orgでユーザ登録しないとダウンロードできません。思ったより短いコードで、コアはたったの200行。

カタカナにするにあたって、特にアルファベットと変わる点はなく同じようにツとシのように識別しづらいものは排除しました。ただ、隣り合うと識別しづらくなる文字の組み合わせがあまり思い付かなかったのでそちらは実装していません。ノとレとか?あとユーザ入力と生成された文字列の比較時に小さいャとヤの区別を付けない方がいいかもしれません。

また、昔から好きなGrayGraphicsのフリーフォントを使わせていただきました。CAPTCHAに使っていいかライセンス的によくわからないので商用利用の際は注意が必要かもしれません。

今回は1つのフォントしか使っていませんが、破られないように強化するならKCAPTCHAのように複数のフォントをランダムに使った方がベターでしょう。文字数も固定長にしない方がいい。ただそれもCAPTCHA破りの汎用性によっては無意味なのかもしれません。現在ある最強のCAPTCHA破りアルゴリズムだとカタカナに対応するためのデータを学習すれば簡単に破れるんでしょうか。

なおPNGではなくTTFを使ったので動作環境にはGDとfreetypeが必要になります。一応PHP5用。ちょっと変えればPHP4でも動くはずです。

By: funaki | 2006年11月27日 | つくる | Trackback | Comments [RSS 2.0]

4 Comments »

  1. https://member.gungho.jp/front/register/entry.aspx
    ひらがなの画像認証なんかもたまたま見かけました。PHP ではないですが…。

    Comment by 奥村隆一 — 2006年11月27日 @ 01:09

  2. 情報ありがとうございます。
    オープンソースになっていないだけで、カタカナも実装例はありそうですね。
    子供向けだと確かにアルファベットは難しい。GungHoの場合、10歳では他の文章中の漢字の方が難しいかもしれませんが。

    Comment by funaki — 2006年11月27日 @ 08:59

  3. [PHP]カタカナCAPTCHA…

    おおーっ!カタカナ知ってる人限定ですが、これ良いですね。 CAPTCHA破りもかなりできるらしい。 アルゴリズム的には堅牢になっていませんが、生成する画像にアルファベットではなく…

    Trackback by Do You PHP はてな — 2006年11月27日 @ 16:23

  4. これはなかなかよさそうですね。
    しかし、テストページでは「ア」と「マ」の判別が難しかったです。
    また、少しはみ出して見えない文字もありました。

    Comment by 八環 — 2007年2月19日 @ 00:55

RSS feed for comments on this post. TrackBack URI

コメントはお気軽にどうぞ

↑top