CAPTCHAが何であるかを説明するのは意味がないと思うので、すぐに使用に移ります。
今日、CAPTCHAはスパムから保護する主な方法の1つとして使用されているため、サイトの通常の運用はその有効性に大きく依存しています。
歪んだテキストを含む画像を使用した最も広く使用されているCAPTCHA。 しかし、最近では、訪問者が質問に答えたり、特定のアクションを実行したりするための選択肢が増えています(たとえば、いくつかの選択肢から写真を選択します)。
どちらの方法を選択しても、CAPTCHAを使用する原則は変わりません。
CAPTCHAを使用してフォームを作成するときは、正しい答えを保存する必要があります。フォームデータを受け取ったら、訪問者の応答を確認します。
このプロセスは、図でより明確に示されています。
![captchaアルゴリズム](https://habrastorage.org/getpro/geektimes/post_images/778/916/89c/77891689cd8cd9e69ff030b23541e91f.png)
ここで最も興味深いのは、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をフォームに追加する 」。
ライブデモを視聴することもできます。