CAPTCHA検証

この記事では、htmlフォームのCAPTCHAフィールドを検証するいくつかの方法について説明します。



CAPTCHAが何であるかを説明するのは意味がないと思うので、すぐに使用に移ります。



今日、CAPTCHAはスパムから保護する主な方法の1つとして使用されているため、サイトの通常の運用はその有効性に大きく依存しています。



歪んだテキストを含む画像を使用した最も広く使用されているCAPTCHA。 しかし、最近では、訪問者が質問に答えたり、特定のアクションを実行したりするための選択肢が増えています(たとえば、いくつかの選択肢から写真を選択します)。



どちらの方法を選択しても、CAPTCHAを使用する原則は変わりません。



CAPTCHAを使用してフォームを作成するときは、正しい答えを保存する必要があります。フォームデータを受け取ったら、訪問者の応答を確認します。



このプロセスは、図でより明確に示されています。



captchaアルゴリズム



ここで最も興味深いのは、2つの操作です。

1. CAPTCHAデータの保存。

2.訪問者から受け取った値の検証。



CAPTCHAデータを保存するには、主に3つの方法があります。

1.非表示のフォームフィールドを使用します。

2.セッションの使用。

3.データベースを使用します。



ご注意 CAPTCHAデータとは、つまり、正しい答え、画像へのパス(使用する場合)、訪問者ID(必要な場合)です。

最初のオプションは、最も保護されていないものです。 実際、訪問者に正しい回答を送信します。また、非表示のフォームフィールドで作業するスパムボットの場合、通常のフォームフィールドで作業するのと違いはありません。



この方法の主な利点は、実装が簡単なことです。 2つのフォームフィールドの値を比較するだけです(訪問者によって非表示および入力されます)。

セッションでデータを保存すると、より高いレベルのセキュリティが提供されます。



正解はサーバーに保存され、訪問者はアクセスできません。 さらに、この場合、セッションの「存続期間」を設定するだけで、CAPTCHAの「存続期間」を簡単に制限できます。



確かに、小さな問題があります。 テキスト付きの画像を使用するCAPTCHAを作成したとします。 これらの画像は、フォームにアクセスしてフォルダーに保存するたびに作成されます。



セッションの有効期限が切れると、これらのファイルはどうなりますか? 答えは何もありません。 それらは蓄積し、スペースを占有します。 つまり 古いファイルを定期的に削除するスクリプトが必要です。



データベース使用してデータCAPTCHAを保存することもかなり安全なオプションであり、長所と短所があります。



セッションと比較した場合の主な欠点は、訪問者を区別する必要があることです。 これを行うには、そのIPアドレス(またはIPアドレスとブラウザーデータの組み合わせ(たとえば、User-Agentヘッダーを使用))を使用できます。



したがって、CAPTCHAデータを保存するには、次のフィールドを持つテーブルを使用できます。



captcha_id-主キー;

captcha_time-CAPTCHAの作成時間。

ip_address-訪問者のアドレス。

captcha_text-写真に書かれたテキスト。

pic_nameは画像の名前です。



この場合、次のクエリを使用してCAPTCHAデータを取得できます。



SELECT COUNT(*) AS count FROM captcha WHERE word = $userValue AND ip_address = $userIP AND captcha_time > $expTime







セッションを超える利点は、写真を削除するためのスクリプトが必要ないことです(単純なSQLクエリで十分です)。



このようなCAPTCHAのphpでの実装の完全な例は、記事に記載されています:「 CAPTCHAをフォームに追加する 」。

ライブデモを視聴することもできます。



All Articles