3

ログ ページへのブルートフォース アタックや、複数のアカウント作成による嫌がらせから保護する方法について情報を収集しています。

最善の方法はキャプチャを使用することであるという結論に達しました (Stackoverflow の皆さんに感謝します)。

しかし、読みにくいキャプチャやアクセント付きの文字は、ユーザーが Web サイトを使用するのを思いとどまらせる可能性があります。

そこで、自分のサイトに合わせた使いやすい小さなスクリプトを見つけました。これは、 0 から 10までの 2 つの数字を合計することを提案する単純な数学のキャプチャです。数字ではなく、 「1」「2」「3」という単語が表示されます。

私の質問は次のとおりです。

1) この小さなキャプチャは、それ自体で十分なセキュリティを提供しますか?

2) 統合した方法は安全ですか? (それをバイパスする方法はありますか?)

800 行のコードを貼り付けないように要約を作成しました。

キャプチャスクリプト:

$n1  = mt_rand(0,10);  
$n2  = mt_rand(0,10);  
$fig = array('zero','one','two','three','four','five','six','seven','eight','nine','ten');  
$result = $n1 + $n2;
$sentence = $fig[$n1] .' plus '.$fig[$n2];  
$_SESSION['captcha'] = $result;  
$captcha_label = "<label for='captcha' >How much does ".$sentence."make?</label>";               
echo $captcha_label."</label><input  type='text' name='captcha'  value=''/><br />";                                 
echo "<input type='submit' name='create' value='create account'>"; 

ページ:

  • フォーム.php:

すべての「アカウント作成」入力フィールド + キャプチャ

=>テスト

  • test.php:

    if($_POST['captcha'] != $_SESSION['captcha']){
    $_SESSION['captcha_control'] = "false";
    }

次に、すべての「アカウントの作成」 $_POSTS がインジェクション テストされます

それらのいずれかまたはキャプチャが "false" を返す場合、スクリプトは => problem.php に偏向します

  • 問題.php:

すべての「間違ったフィールド」が強調表示された初期フォームをエコーし​​、新しいキャプチャが表示されます。検証 => test.php
に戻る

どうもありがとう。

4

2 に答える 2

7

ほとんどの単純な CAPTCHA と同様に、スパマーがサイトを破る方法を見つけるのに数分を費やすほど重要なサイトになるまでは、かなりうまく機能します。その時点で、スパムが殺到します。

独自の CAPTCHA を使用する場合、これはやり過ぎです。ランダムにする必要さえありません。ユーザーに一定の単語を入力するよう要求するだけで (たとえば、「このボックスに「orange」と入力してください」)、単純なスパムボットの大部分が阻止されます。

于 2012-10-31T21:43:11.337 に答える
4

キャプチャの品質についての質問には、duskwuff が答えたと思います。質問のタイトルで尋ねられたように「安全」かどうかについては、その用語を定義していませんが、おそらく定義していません。

$_SESSION['captcha'] = $result;

おそらく、正当なユーザーを扱っているかどうかを判断する前に、サーバー側のセッションを割り当てます。これにより、攻撃者はセッション タイムアウト ウィンドウ内に多数の一意のセッションを作成するだけでサーバーのストレージを使い果たすため、DOS 攻撃を受ける可能性があります。あいまいさに依存しているため、隠し変数に回答を格納する (およびすべての入力を<form>タグ内に配置する) と、サーバー側のリソースを占有することなく同様に機能します。

于 2012-10-31T21:50:39.480 に答える