フォームのスパム対策に有効な「画像認証画像(captcha)」を、cfimageタグを使うことによって大変簡単に作ることができます。
「cfimage action="captcha"」とし、パラメータで以下の内容を指定できます。
<cfimage
action="captcha"
fontSize="22"
width="240"
height="100"
text="#rndString#"
fonts="Arial,Verdana"
difficulty="low">
|
|
|---|---|
<cfimage
action="captcha"
fontSize="22"
width="240"
height="100"
text="#rndString#"
fonts="Arial,Verdana"
difficulty="medium">
|
|
<cfimage
action="captcha"
fontSize="22"
width="240"
height="100"
text="#rndString#"
fonts="Arial,Verdana"
difficulty="high">
|
|
(表示されるテキストはランダムに設定しています。)
※CAPTCHAイメージに使用するテキスト文字列を作成
<!--- テキスト文字列の長さを設定 --->
<cfset stringLength=5>
<!--- 文字列に使用する文字のリストを指定 --->
<cfset stringList="A,E,F,G,H,J,M,N,R,T,a,b,d,e,f
,g,h,m,n,q,r,t,2,3,4,5,6,7,9">
<cfset rndString="">
<!--- ランダムな文字から文字列を組み立てるループを作成 --->
<cfloop from="1" to="#stringLength#" index="i">
<cfset rndNum=RandRange(1,listLen(stringList))>
<cfset rndString
=rndString & listGetAt(stringList,rndNum)>
</cfloop>
<!--- ランダムな文字列をハッシュします --->
<cfset rndHash=Hash(rndString)>
フォームに対するスパム対策として「画像認証」は大変有効な手段であるといえます。
しかし、音声ブラウザー利用者の場合、音声ブラウザーでは「画像認証」用画像は読み上げないため、「画像認証」を取り入れたフォームをそのままで利用できません。「画像認証」を利用する場合は、そのような利用者もいることを配慮しましょう。
文字の大きさや文字数が、指定した画像幅には大きい場合、エラーとなることがあります。その場合、文字サイズを小さくしたり、数を減らしたり、画像幅を広げたりすることで対応できます。
※エラーメッセージ:
「このエラーは、 argument が無効であるために発生しました。
入力を確認してください。
CAPTCHA イメージに指定された幅が小さすぎてテキストが収まりません。 」
画像認証で使う文字はアルファベット(大文字・小文字)と数字を指定することができ、ランダムにセットすることができます。
しかし、判別しにくい文字は避けた方がよいでしょう。
(Sanou 2008/07/08)