私は visualCaptcha のユーザーインタラクションが好きですが、それが与える保護の量に疑問を投げかけています。
(デフォルトでは)5つの画像しかないので、正しい画像を取得するには、単に5分の1の問題ではありませんか?
また、プロセス全体はstart/X
リクエスト。Xは生成するオプションの数です。私の知る限り、ボットは5ではなくX = 2で開始し、試行の50%を正しく行うことができます。
ライブデモ には2つのかなりの弱点があり、これにより簡単に破ることができます。
キャプチャを強化するためのいくつかのアイデア:
本当に壊れないキャプチャはないことに注意してください。期待できるのは、攻撃者がそれを打破するために投資する必要がある労力を増やすことだけです。しかし、それだけで十分です。 Captchaは、あいまいさによるセキュリティが報われる数少ない領域の1つです。スパマーは、ぶら下がっている果物を探します。あいまいな自家製のキャプチャソリューションを使用していて、特に価値のあるターゲットではない場合、多くのスパマーは怠惰すぎてそれを理解できません。あなたがが特に価値のあるターゲットである場合、彼らはあなたのキャプチャを解決するために第三世界の国々からたくさんの人々を雇うだけです。そして、あなたはあなたのウェブサイトを通常のユーザーが使用できないようにすることなしにこれから守ることはできません。
それを試すために、私は 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.
クライアントに画像の数を選ばせるのではなく、固定数の画像(たとえば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";
VisualCaptchaはUXの優れたソリューションですが、100%の成功率で失敗する可能性があります。
概念実証として、VisualCaptchaを100%無効にする小さなスクリプトが このブログ投稿 に含まれています
VisualCaptchaのセキュリティを向上させるいくつかの手法があります。これらの手法はVCの「コア」に統合されませんが、開発者は Bruno Bernardinoと話し合った のように、必要に応じてそれらを実装することを決定できます。