
ウェブサイトのユーザ登録のさいに、ロボットによる大量自動登録をさけるために、
ランダムな文字列の含まれた画像を表示させ、その文字列を入力することにより、
人間による登録だと判断させる方法がありますが、
あれは、どうやって実現しているのでしょうか?
なお、環境はCentOS4、Apache2.0.52、MySQL4.1.20、PHP4.3.9です。
PHPにGD組み込んでます。(使ったことはないのですが・・・)
なお、画像はgifを希望しています。
また、できれば、
●文字列を音声で発音してくれる機能
●l(エル)と1(イチ)、5とS(エス)などまぎらわしい文字は排除したい
の2点を実現できればと思っています。
以上、よろしくお願いします。
No.6ベストアンサー
- 回答日時:
#1です。
結構有名なページですが、ゲイツ認証ってのがあります。はっきり言って笑えます。こういう認証なら誰も嫌がりませんよね。
http://captcha.jp/
ゲイツは間違う可能性はありますが、みのもんたはどれ、とかなら間違う人はいないでしょうね。
あと、簡易的にはJavaScriptを使ったものがあります。画像をその場で生成するのではなく、最初に作っておいたものを表示するようです。
http://youmos.com/news/captcha_validation
PHPでGD使えば容易く画像を作れますが、サーバ負荷を考えると必要かつ十分な数だけ先に画像を用意しておいて認証に使うというのも一つの解決策かもしれませんね。
お礼が遅くなってしまってすみません。
ゲイツ認証、笑えました。
日本人なら、タモリが一番間違えにくいかな?w
>あと、簡易的にはJavaScriptを使ったものがあります。画像をその場で生成するのではなく、最初に作っておいたものを表示するようです。
なるほど・・・。
CAPTCHA、奥が深いですね。
あと、サーバ負荷のことを考えていませんでした。。。。うっかり。
ありがとうございます。
No.5
- 回答日時:
>暗号化
すみません当方の勘違い^^;
送信データなどは平文で問題ないすね。
// 送信データを暗号化して_SESSIONにも暗号化した物を置いて・・・て最初からssl使えよって話になる^^;
>session id
冗長にしか過ぎないのですが、意図しないPOSTなどに対応できるのですよ。
httpのクエリを恣意的なものにして送信することでF5アタックと同等の効果を得られるバッチを組むことが出来ますが、
セッションID(厳密にはcookie)を破棄させればフォーム画面を呼びなおさねばなりません。
もちろん$_SESSIONそのものを破棄させることでも対応可能ですけど、
IDを保持しているか 破棄しているか では堅牢さが微妙に違います。
>これ、アニジフwでなくても、JavaScriptで画像を置き換えていけば、同じことが実現可能ですね。
これもアニジフ大先生並みに設計が面倒ですけどね^^;
ブラウザごとの対応だけでなく マシンスペックや環境によっては超高速で画像が切り替わったり、とか良くあります。
キチンとしたコーディングをすれば問題ないですけど、検証がまた面倒・・・・
ついでにJS切られてるとアウト・・・
そういう意味ではアニジフ大教授はかなり偉大な存在であらせられますな。
>でも、結局人海戦術には負けますが。これだけ流動的なQ&Aならどうかなあと。
入力するエンドユーザさんからしてみれば「ウゼェ!」ってなるかもしれませんね。^^;
お礼が遅くなってしまってすみません。
暗号化とsession idについての解説ありがとうございます。
>JavaScript
なるほど、そうですよね。。。
>そういう意味ではアニジフ大教授はかなり偉大な存在であらせられますな。
ですねー。
>入力するエンドユーザさんからしてみれば「ウゼェ!」ってなるかもしれませんね。^^;
うーん、確かに。あるいみ(エンドユーザにとって)おもしろいかな、ともおもったのですが・・・やっぱりうざいですよね・・・。
ありがとうございます
No.4
- 回答日時:
#1です。
盛り上がって来ているのでちょっと参戦します。
一般的なCAPTCHAなら、#1のリンクを辿れば導入はそう難しくないでしょう。GDを使った事が無くても使える環境さえ整えれば実装できるかと。
音声でというはとても面白いかもしれませんね。障害者向けだったり。ただ、音声認識でロボットに破られる、なんて事だと元も子もありませんが(笑。
余裕があれば作ってみたいですが、ming関数を使ってFlashを作ったり(アルファベット読音声のswfを埋込む)、外部スクリプトでmp3を合成させたりすれば可能かと思います。flashなら音声と画像をいっぺんに表示する事が可能ですね(画像はFlashでも合成可能でしょうが、解析されれば意味が無いのでGDで作ったものを外部読込み)。
また、ほとんどのCAPTCHAはアルファベットですが、日本語を使えば海外からのアクセス制限が比較的容易になると思います。日本語の入力は外国人には難しいでしょうし、投稿スパムの多くは海外からのものが多いと言う事もあります。漢字とひらがなならほんのちょっと崩すだけでOCR出来なくなりますし。辞書から引っ張って来た文字列ならば入力も簡単なのでユーザフレンドリーって感じです(一般的なCAPTCHAはランダム文字列なので入力が難しい)。
日本語のもの
http://php.to/tips/8/
http://drupal.0829.info/module/captchajp
参考まで。
ありがとうございます。
>音声でというはとても面白いかもしれませんね。障害者向けだったり。
#3さん(=#2さん)へのお礼にもアクセシビリティのことを書いたのですが、
そか、別に音声だけでなく、画像と音声の両方を掲載すればいいですよね。。。っていうか、普通そうか。。。
>ming関数を使ってFlashを作ったり(アルファベット読音声のswfを埋込む)、外部スクリプトでmp3を合成させたりすれば可能かと思います。
おー、おもしろそうですね。
また、日本語のCAPTCHA、おもしろいし、有効ですね。
>漢字とひらがなならほんのちょっと崩すだけでOCR出来なくなりますし。
なるほど、「みのもんた」より「明石家さんま」のほうが認識されないですね。
--
あと、話題が若干それますが、#1へのお礼に書いた、W3Cのページに、パズルを掲載するってのがあったのですが、5問くらい簡単な問題を出すって有効かなあと思いました。
たとえば、
●あなたの希望するログインIDは何文字ですか?(フォームの他の項目と絡めると、難しそうかなと)
●アメリカに今まで何回行ったことがありますか?(わざと、答えがどうでもいい質問をだす。最後の質問のため)
●このドメインは「http://www.*****.com」ですが、「*****」の部分は何文字ですか?(他のサイトで流用されてもいいように、サイトによって答えが異なる問題をだす。独自ドメインを持っていないとだめですが)
●今日は何日?(深夜0時をまたぐと困りますが。そしたら、「今は何月?」。月をまたぎそうなら、「今年は西暦何年?」。年をまたぎそうなら、「もうすぐ今年も終わりますね。年が変わったら、西暦何年?」)
●この問題、何問目?(クイズタイムショック的にw)
・・・のような問題をランダムに出す。
で、最後の質問は
●今までの答えを、全て足したら、いくつですか?
みたいなのを画像で表示・・・って画像重たくなるけど・・・ってどうでしょう?
答えを入力する欄が、質問の数だけ必要ですが、答えが数字なら楽かなと。
でも、結局人海戦術には負けますが。これだけ流動的なQ&Aならどうかなあと。
どうでしょうか?
No.3
- 回答日時:
>既存のCAPTCHAを使うとしたら、どれが比較的安全に、スパマーに対応できるものなんでしょうか?
堅牢さで言えばどれも同じだと思いますよ。
結局のところ機械的に(ロジカルに)破るのが難しいだけで、人海戦術・偽装ページからの誘導・アナログな方法でのhackなどに対しては無力です。
また、先に述べた3つのファイルでも完全でなく、いろいろ工夫する必要はあります。
(暗号化とか、セッションIDの刷新とか。
私はすべて使ったことがあるわけではないのでどれがいいというのは分かりませんが、
CAPTCHA Xは見たことがあります。導入もそれほど難しくないです。
>これって、アニジフだからスパマーにとっては解析しづらいかもしれないし、
高橋メソッドと言え・・・っ!!(ざわ
アニジフって誰だろうと素で思った。^^;
>どう思います?
面白いですね。
日本のサイトでもどこかで見たことある気がします・・・が失念。
画像の生成ロジックがかなり苦心しそうですが。^^;
アニメーションgifの生成は確かpeclでないと出来ないので面倒と言えば面倒かもしれません。
画像バイナリを無理やりくっ付けることで実装することも出来ますが。。
あ・・・アニジフなんて表現って今どきしませんね。すみません^^;
>堅牢さで言えばどれも同じだと思いますよ。
>結局のところ機械的に(ロジカルに)破るのが難しいだけで、人海戦術・偽装ページからの誘導・アナログな方法でのhackなどに対しては無力です。
確かにおっしゃるとおりですね。
>暗号化とか、セッションIDの刷新とか。
すみません、これって具体的にはどういうことを意味しているのでしょうか?
●暗号化・・・htmlをJavaScriptで暗号化して、なんじゃこりゃーなhtmlソースにする・・・?って違うかな。でもこれって有効かも。
●セッションIDの刷新・・・「セッションIDの刷新」という意味はわかるのですが、どういう効果があるのでしょうか?
しかし、
#1さんへのお礼に書いたW3Cのページにも書いてあったのですが、
スパマーに対抗しようとすると、それだけ、アクセシビリティが悪くなりますね。というか、「スパマーへの対抗」と「アクセシビリティ」の両立は、どう考えても実質不可能かな。
↑でアクセシビリティと言ったのは、病気として知覚に問題がある人に対しての配慮だけではないです。たとえば、どこだったかな、マイクロソフト系のサイトで、文字列を読み上げる機能があって、
だけどそれを聴くと、すごいノイズが入っていて、お経を唱えているようなボイスも入っていて、その中で、日本語で、「イチ・・・ヨン・・・サン・・・ロク・・・シチ」と言ってました。
自分は特に知覚に問題があるわけではないですが、わかるまで5回くらい再生しました・・・。
で、アクセシビリティを考慮しなくていいのなら、
>日本のサイトでもどこかで見たことある気がします・・・が失念。
>画像の生成ロジックがかなり苦心しそうですが。^^;
これ、アニジフwでなくても、JavaScriptで画像を置き換えていけば、同じことが実現可能ですね。
ありがとうございます。
No.2
- 回答日時:
CAPTCHAは既存の物を使うのが手っ取り早いですね~
>あれは、どうやって実現しているのでしょうか?
phpで実装するのに必要なのは3つ。
1.画像を動的に生成して標準出力し、入力させたい文字列をセッションで保持させるプログラム
2.入力用のフォーム
3.入力された文字列とセッションの等価をチェックするプログラム
実は凄く簡単に作れるんですよ。
phpでgdとセッションを扱うときの入門に最適ですな。
脱初心者を目指している人に作らせたいプログラムでもあります。
総コードも300行くらいだった気がする。
音声についてはphpで生成するには荷が重いかもしれません。
出来るのかもしれませんが。
この回答への補足
補足させてください。もしお手すきならば。。。、
http://www.phpclasses.org
で、CAPTCHA のタグで、検索して、トップの評価を得ているものに、
http://www.querythe.net/Animated-Gif-Captcha/#le …
(デモです)
がありました。
これって、アニジフだからスパマーにとっては解析しづらいかもしれないし、
簡単な計算式を表示させてるので、(で、答えを入力する)、ロボットは計算できない・・・ので
いいかな・・・と思ったのですが(あくまで素人考え)
どう思います?
ありがとうございます。
回答が前後しますが、
>音声についてはphpで生成するには荷が重いかもしれません。
アクセシビリティを考えてこれはやめようと思います。
>phpで実装するのに必要なのは3つ。
>1.画像を動的に生成して標準出力し、入力させたい文字列をセッションで保持させるプログラム
>2.入力用のフォーム
>3.入力された文字列とセッションの等価をチェックするプログラム
>実は凄く簡単に作れるんですよ。
なるほどたしかに。
たぶんGDを使ったことがないから、
苦労しそうなんでしょうね。。。
>CAPTCHAは既存の物を使うのが手っ取り早いですね~
やっぱりそうしようかな。。。
ただ、
#1さんがあげてくださった、
http://ja.wikipedia.org/wiki/CAPTCHA
に、
「最も有名なCAPTCHAの一つのEZ-Gimpyを打ち破る手法を詳述した論文を発表し、その手法は92%の的中率であると検証された。」と・・・。
意味ない・・・。
既存のCAPTCHAを使うとしたら、どれが比較的安全に、スパマーに対応できるものなんでしょうか?
もしご存じでしたら、お教えいただければ幸いです。
No.1
- 回答日時:
CAPTCHAですね。
URLを参照してください。たくさんありすぎて紹介出来ません(笑。http://ja.wikipedia.org/wiki/CAPTCHA
http://phpspot.org/blog/archives/2006/11/phpcapt …
この回答への補足
ありがとうございます。本当にいろいろあるんですね。
でも、wikiを読んだら、スパマーは結構みやぶってるらしく・・・それが懸念です。
wikiのページからとんだ、
Inaccessibility of Visually-Oriented Anti-Robot Tests
http://www.w3.org/TR/turingtest/
をひととおりよんでいました。
(日本語訳のページもあるみたいだけど、つながらないです)
目次を抜粋すると、
# 3. Possible solutions
* 3.1 Logic puzzles
* 3.2 Sound output
* 3.3 Limited-use accounts
* 3.4 Non-interactive checks
o 3.4.1 Spam filtering
o 3.4.2 Heuristic checks
* 3.5 Federated identity systems
o 3.5.1 Single-sign-on
o 3.5.2 Public-key infrastructure solutions
o 3.5.3 Biometrics
* 3.6 Other approaches(クレカ番号を入れさせるとか)
だそうで、
結局いくつかの方法を併用するのがベストなのでしょうね。
でも手間が・・・。
ともあれ、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- WordPress(ワードプレス) ワードプレスで、左寄せ画像と文字を横並びにせず、画像の下に文字を表示される方法を教えてください 1 2022/04/24 11:06
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
- gooブログ Twitterの動画画面をgooブログに埋め込めない 4 2022/06/03 16:40
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
- Excel(エクセル) Excel 文字列を結合するときに重複をなくしたい 関数・VBA 2 2022/12/12 10:40
- Excel(エクセル) B列に、A列の数字が偶数の場合は1減算した数字、奇数の場合はそのまま数字を自動表示したい 4 2022/04/16 12:01
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP GD 画像が縮小できない
-
天才の人、教えてください!
-
PHPでGDライブラリを使って縮小...
-
PHPでGmail署名ジェネレータ
-
DBから、画像を表示する、方...
-
背景画像のランダム表示
-
フォルダの属性について
-
画像の読み込みが遅いサイトと...
-
画像のアップロードができない
-
アップロードした画像をうまく...
-
画像の一部を出力
-
file_get_contents 画像直URL
-
twenty tenに、gif画像を組み...
-
WordPressで画像ファイルが壊れ...
-
写真投稿システムにおけるセキ...
-
PHPでワードのファイルを生成し...
-
FLASHとPHPの連携について
-
MatlabによるRGB空間からYUV空...
-
Webカメラように頻繁に画像を更...
-
Ajaxで画像表示
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
iphoneで虫眼鏡の作り方
-
Illustratorで文字と画像を流し...
-
pictureboxに表示した画像のフ...
-
透過PNGが透過されない!!
-
GDI+を使ったビット数とDPIの扱い
-
VBAでJPGサイズ変更
-
PHPで吐き出した画像にリンクを...
-
ListViewコントロールでサムネ...
-
拡張子php画像をjpg画像等に変...
-
ビットマップ画像を読み込むプ...
-
C#とJavaで、MP3タグの画像を表...
-
SQLiteに画像を格納したい
-
手作業で埋め込んだ、UserForm1...
-
【PHP】サーバー上で TIFFをJPE...
-
BLOBデーターの画像の表示方法...
-
jar化すると画像が消える
-
「imagejpeg」(GD)で作成した...
-
PythonのTkinter詳しい方へ。画...
-
php,mysqlにて画像パス保存/表...
おすすめ情報