Captchaは現在、フリーフォーマットを保護するための最も一般的な方法の一つです。もともとデータの安全性を守るためではなく、スパム対策や人間であることを認識するために作られたものです。
しかし、機械で生成されたものなので、必ずしも完璧ではありませんが、キャプチャーテストの成功率は99%前後で、よくできたスパムロボットで解読できる画像は1%程度です。
他にもオプションがあり、例えば私はこのソリューションを使っています。
キャプチャテストを解くことができれば、ユーザーは人間である可能性が高い。しかし、タスクを解決できないユーザー、特に目の不自由なユーザーのことを考えるのは良いことです。複数の可能なテストを組み合わせるのは良い解決策です(特に音声プリフェッチ)。しかし、現状では画像から読み取るよりも、機械による音声認識の方が圧倒的に効率的です。そのため、この解決策は必ずしも理想的とは言えません。
ある寸法の空白の画像を生成し、そこに数文字を入力すれば、それ以上編集することなく読みやすくなることがよくあります。マジかよ!?ほとんどのスパムボットは愚かで、より優れた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:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | ja