LAVELOG にはコメントスパムが良く来る。
CAPTCHA が貧弱過ぎて簡単にスパム業者に突破されているんだろう。

これは CAPTCHA になって無いよねw

ここのブログがなかなか面白くて実際にはてなの CAPTCHA を突破している。

  • 「はてなのCAPTCHAは簡単に破れる」
    http://blogs.wankuma.com/nagise/archive/2007/10/26/104428.aspx
で、手間を掛けずに CAPTCHA 画像を生成する方法を考えてみたのだが
 - JPEG 画像を最大圧縮する
ってのを思い付いた。

テキストの画像は ImageMagick を使うと簡単にできるのでちょっと試してみる。
圧縮率 3% で文字は16pt。

convert -quality 3 -size 100x30 xc:white \
 -pointsize 16 -weight 1 \
 -fill black -draw "text 10,20 password" captcha.jpg

いい感じに壊れててゴミも散らされてる。 かつ、ちゃんと文字も読めてる。
これで十分な気もするが ImageMagick は色々できるのでもう少し遊んでみた。
  • ランダムな位置に XOR で●を書く。
  • ±20度のランダムな角度を付ける。
#!/bin/bash

x1=`expr $RANDOM % 80 + 10`
y1=`expr $RANDOM % 10 + 10`
x2=`expr $x1 + 8`
y2=`expr $y1 + 8`
r=`expr $RANDOM % 40 - 20`

convert -size 100x30 \
 \( xc:none -fill black	-pointsize 16 -weight 1 -draw "text 10,20 $1" \) \
 \( xc:none -fill black	-draw "circle $x1,$y1 $x2,$y2" \) \
 -compose Xor -composite png:- \
| convert png:- -quality 10 -background white -flatten -alpha off -rotate $r captcha.jpg

こうなった。

なんかすごく良い感じだ。
拡大してみる。

プログラマ視点でこれの解析プログラムは書く気がしない。 つーか俺には無理w。

ImageMagick はレンタルサーバにも結構入っているのでスクリプトはそのまま CGI で使えると思われる。 LAVELOG にも採用して欲しいがここって運営の連絡先どこにも書いて無いんだよね.. orz

追記:
画像を歪ませる -swirl と言うオプションに気が付いたのでこれも追加してみた。

#!/bin/bash

x1=`expr $RANDOM % 80 + 10`
y1=`expr $RANDOM % 10 + 10`
x2=`expr $x1 + 8`
y2=`expr $y1 + 8`
r=`expr $RANDOM % 40 - 20`

convert -size 100x30 \
 \( xc:none -fill black	-pointsize 20 -weight 1 -draw "text 10,20 $1" -swirl 50 \) \
 \( xc:none -fill black	-draw "circle $x1,$y1 $x2,$y2" \) \
 -compose Xor -composite png:- \
| convert png:- -quality 40 -background white -flatten -alpha off -rotate $r captcha.jpg

いかにもCAPTCHAっぽい。
十分実用レベルだな。