web-dev-qa-db-ja.com

visualCaptchaはどの程度強力ですか?

私は visualCaptcha のユーザーインタラクションが好きですが、それが与える保護の量に疑問を投げかけています。

Screenshot

(デフォルトでは)5つの画像しかないので、正しい画像を取得するには、単に5分の1の問題ではありませんか?

また、プロセス全体はstart/Xリクエスト。Xは生成するオプションの数です。私の知る限り、ボットは5ではなくX = 2で開始し、試行の50%を正しく行うことができます。

8
Arnold Daniels

ライブデモ には2つのかなりの弱点があり、これにより簡単に破ることができます。

  1. キャプチャの質問に対する回答は5つしかないため、ボットは20%の確率でランダムなシンボルを選択してキャプチャを解決します。デモでは、連続して20回以上間違った答えを選んだ後、私を禁止しなかったので、ボットがたまたま正しい答えを得るまで推測し続けることができないわけではありません。
  2. まったく変更されていない非常に限られた画像のセットのみがあります。それらは異なるURLの下に表示されますが、常に同じように見えるため、ボットは画像をロードしてデコードすることでそれらを識別できます。また、システムは毎回同じ単語の各画像を参照します。これにより、ボットにどのWordがどのイメージを意味するかを簡単に伝えることができます。

キャプチャを強化するためのいくつかのアイデア:

  • 複数のオブジェクトをマークするようにユーザーに依頼し、これらのオブジェクトとこれらのオブジェクトのみをマークしたときにのみ通過させる。これは、ランダムな推測の効率を大幅に低下させます。
  • 間違った回答が何度も続いた後、IPアドレスを数分間禁止する
  • より大きな画像セットを使用する
  • それらを参照するには、文字列のさらに大きな辞書を使用します
  • ランダム化されたパラメーターを持つ画像変更アルゴリズムを使用して、画像を少し遠ざけるため、画像を自動的に認識するのが難しくなります

本当に壊れないキャプチャはないことに注意してください。期待できるのは、攻撃者がそれを打破するために投資する必要がある労力を増やすことだけです。しかし、それだけで十分です。 Captchaは、あいまいさによるセキュリティが報われる数少ない領域の1つです。スパマーは、ぶら下がっている果物を探します。あいまいな自家製のキャプチャソリューションを使用していて、特に価値のあるターゲットではない場合、多くのスパマーは怠惰すぎてそれを理解できません。あなたがが特に価値のあるターゲットである場合、彼らはあなたのキャプチャを解決するために第三世界の国々からたくさんの人々を雇うだけです。そして、あなたはあなたのウェブサイトを通常のユーザーが使用できないようにすることなしにこれから守ることはできません。

6
Philipp

それを試すために、私は visual captcha demo を投稿しようとする小さなボットを書きました。

最初にキャプチャセッションを開始する場合は、http://demo.visualcaptcha.net/start/2を使用した2つのオプションのみが必要です。それは、2つの可能な結果の1つを選び、http://demo.visualcaptcha.net/tryに投稿します。

結果:

✓☓☓✓✓✓☓☓☓☓☓☓☓✓✓☓☓☓☓☓✓☓✓✓☓✓✓☓✓✓☓✓✓✓✓✓☓✓☓✓✓✓☓✓☓✓☓✓✓✓
☓✓✓☓✓☓✓✓☓☓✓☓✓✓☓☓✓☓✓✓✓☓✓☓☓✓✓☓✓☓✓☓☓☓☓☓✓✓☓☓✓☓☓✓☓✓☓☓☓✓
✓☓☓✓✓✓☓✓☓☓✓☓☓✓☓☓☓☓☓☓✓✓✓☓✓☓✓☓☓☓✓✓☓✓☓☓✓✓☓☓☓✓✓☓✓☓☓✓✓✓
☓✓☓✓✓☓☓✓✓☓☓☓✓☓☓✓☓✓☓✓✓☓☓☓✓✓☓✓☓✓✓✓✓✓✓✓✓✓☓☓✓☓☓☓✓✓☓✓✓☓
☓✓☓☓✓✓✓✓☓✓✓✓☓✓✓☓☓✓☓✓✓✓✓☓☓✓✓✓☓☓✓☓✓☓✓✓✓☓✓✓☓☓✓☓✓☓☓☓☓☓
Of the 250 tries, I succeeded 127 times and failed 123 times.

VisualCaptcha は明らかに非常に安全ではありません。

クライアントに画像の数を選ばせるのではなく、固定数の画像(たとえば5)を使用すると、成功した試行を5分の1に減らすのに役立ちます。ただし、ほとんどのユースケースではそれでは不十分です。


<?php

/**
 * Try posting to the visualCaptcha demo
 * @return boolean  true if posted successfully
 */
function tryVisualCaptcha()
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_COOKIEJAR, "/tmp/visualcaptcha-cookies.txt");
    curl_setopt($curl, CURLOPT_COOKIEFILE, "/tmp/visualcaptcha-cookies.txt");

    curl_setopt($curl, CURLOPT_URL, "http://demo.visualcaptcha.net/start/2");
    $ret = curl_exec($curl);
    $result = json_decode($ret);

    $post = [$result->imageFieldName => $result->values[0]];

    curl_setopt($curl, CURLOPT_URL, "http://demo.visualcaptcha.net/try");
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
    curl_exec($curl);

    $info = curl_getinfo($curl);
    return strpos($info['redirect_url'], 'validImage') !== false;
}

// Main
$results = [0 => 0, 1 => 0];

for ($i = 1; $i <= 250; $i++) {
    $success = tryVisualCaptcha();
    $results[(int)$success]++;

    echo $success ? "✓" : "☓", $i % 50 === 0 ? "\n" : "";
}

echo "Of the ", array_sum($results), " tries, I succeeded ", $results[1],
  " times and failed ", $results[0], " times.\n";
2
Arnold Daniels

キャプチャを個別の画像に分割し、各画像と対象の単語のGoogle画像検索を実行するだけです。そして、最も多くの結果が得られる方を選択します。その時点から、私はかなり高い精度を得ることができるとかなり確信しています。

あなたはの検索を行うことができます

"Type below the answer to what you hear" OBJECT

ここで、OBJECTは画像の単語です。

例: ランプロックフラグ

1
Damian Nikodem

VisualCaptchaはUXの優れたソリューションですが、100%の成功率で失敗する可能性があります。

概念実証として、VisualCaptchaを100%無効にする小さなスクリプトが このブログ投稿 に含まれています

VisualCaptchaのセキュリティを向上させるいくつかの手法があります。これらの手法はVCの「コア」に統合されませんが、開発者は Bruno Bernardinoと話し合った のように、必要に応じてそれらを実装することを決定できます。

1
ycam