PHP Manual
/
アルゴリズム

Captchaの仕組み(説明用画像)

22. 08. 2019

Obsah článku

Captchaは現在、フリーフォーマットを保護するための最も一般的な方法の一つです。もともとデータの安全性を守るためではなく、スパム対策や人間であることを認識するために作られたものです。

しかし、機械で生成されたものなので、必ずしも完璧ではありませんが、キャプチャーテストの成功率は99%前後で、よくできたスパムロボットで解読できる画像は1%程度です。

仕組み

他にもオプションがあり、例えば私はこのソリューションを使っています。

  • サーバーは、ユーザーがフォームページを要求したという情報を受け取り、フォームページの生成を開始する。
  • 未来のキャプチャテストフィールドには、何も書いていない秘密のアドレス(乱数、文字列、...何でもいい)が書かれた画像が置かれます。
  • そのアドレスに画像が生成され、保存されます。同時に、正しいトランスクリプトがどこかに書き込まれます(おそらくセッションやデータベースに)。
  • ユーザーがフォームを送信する際に、入力した内容と一致するかどうかがチェックされます。その場合、フォームが処理されます。そうでない場合は、別の画像の再描写を依頼する。
  • 成功した場合も失敗した場合も、一時的なキャプチャ画像は削除されます(2度と使用できません)。一定時間内に送信されないと、そのフォームも削除されます(失効)。

正しい転写

キャプチャテストを解くことができれば、ユーザーは人間である可能性が高い。しかし、タスクを解決できないユーザー、特に目の不自由なユーザーのことを考えるのは良いことです。複数の可能なテストを組み合わせるのは良い解決策です(特に音声プリフェッチ)。しかし、現状では画像から読み取るよりも、機械による音声認識の方が圧倒的に効率的です。そのため、この解決策は必ずしも理想的とは言えません。

カスタムシンプルキャプチャ画像

ある寸法の空白の画像を生成し、そこに数文字を入力すれば、それ以上編集することなく読みやすくなることがよくあります。マジかよ!?ほとんどのスパムボットは愚かで、より優れたOCRで完璧に読み取れるテキストであるにもかかわらず、この種の保護機能を持つ一般的なフォームを攻撃することができないのです。

出来上がった画像は、次のようになります。

<img src="captcha.php" alt="ukázková captcha">

何度かページを更新してみると、その都度コードがランダムに変化しているのがわかると思います。デモのため、保存せずに生成しているだけなので、読み込んだらすぐに削除されます。

事実上すべてのPHPインストールとホスティングで利用可能なPHPGDライブラリを使ってソースコードを解いたのです。

Header("コンテンツタイプ:image/png");
$obr = ImageCreate(100, 35);
$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //背景色の定義
$bila = ImageColorAllocate ($obr, 255, 255, 255); //テキストの白色定義
$styl = array ($pozadi);
ImageSetStyle ($obr, $styl);
$nahodne_cislo = rand(11111,99999); //5文字の乱数抽選
imagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //テキスト(ここでは数値)を描画する関数です.
ImagePNG($obr); //画像をメモリに生成してレンダリングする
ImageDestroy($obr); //メモリから画像を削除する(一度生成した画像はもう必要ないので).

画像のレンダリングは、あとはHTMLの問題です。

<img src="captcha.php">

このスクリプトは、さらに手を加えないと、それ自体では機能しないことに注意してください。あくまで簡単な画像を生成するためのデモとしてご利用ください。

概要

Captchaテストはかなり信頼性が高いが、煩わしく、時間がかかる。そのため、javascriptで別の画像を読み込むオプションをユーザーに提供すると、ページ全体を再読み込みする必要がなく、すべてを再度入力する必要がありません。

覚えておいてください。人間にとっては些細なことでも、機械にとっては決して実現可能な解決策ではないかもしれません。そのため、完全に読み取れるテキストを使ったこの原始的なキャプチャでも、半分以上のスパムを防ぐことができるのです。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
Status:
All systems normal.
2024