0

サーバー上にフォームがあり、それを処理するための php があります。他のサーバー上では、この構成を変更できません。大量のスパムを受信したので、修正しようとしました。クロスドメインが原因で SESSION が機能しなかったため、トークンもキャプチャもありません。 $_SERVER["HTTP_REFERER"] は信頼できません。1日1回変化する暗号化キーを実装しようと考えていますが、限界があると思います。もっと良いアイデアはありますか?

暗号化されたキーの例:

$key = "string".date("d");
4

5 に答える 5

1

CAPTCHA を使用するためにセッションは必要ありません。多くの種類の CAPTCHA が存在します。以下の方法でも、おそらく 99% のスパムボットを寄せ付けません:

<form action="...">
<input type="hidden" name="thequestion1" value="23">
<input type="hidden" name="thequestion2" value="-">
<input type="hidden" name="thequestion3" value="5">
How much is 23-5?
<input type="text" name="theanswer">
<input type="submit">
</form>

ほとんどのスパムボットは、入力フィールドと送信ボタン以外には見えません。

この種の CAPTCHA は、ほとんどのスパムを締め出すに違いありません。

PS: サーバー上の thequestion1、thequestion2、thequestion3 の値を安全に評価してください。

于 2012-08-17T10:00:24.890 に答える
1

私が以前に使用したテクニックの 1 つは、@SiGanteng が提案したものと似ていますが、新しいフィールドを追加するのではなく、既存のフィールドの名前属性を変更して、プレフィックスを削除または追加できます。

<script>
var inputs = document.getElementById('myform').getElementsByTagname('input');
for(i=0; i<inputs.length; i++) {
    inputs[i].name = "antispam_" + inputs[i].name;
}
</script>
于 2012-08-17T10:18:43.390 に答える
1

多くのボットは JavaScript を実行しないため、フォームに任意のフィールドを挿入できます。

<form id="douchebag" action="http://yourotherserver.com/process.php" method="post">
<input type="text" name="name" />
.. bunch of other inputs
</form>

次にあなたのjs:

var bugSpray = document.createElement('input');
bugSpray.setAttribute('type', 'hidden');
bugSpray.setAttribute('name', 'aa');
bugSpray.value = 'bb';
document.getElementById('douchebag').appendChild(bugSpray);

それからあなたのprocess.php

if(empty($_POST['aa']) || $_POST['aa'] != 'bb') // bot
于 2012-08-17T10:06:05.797 に答える
0

簡単なチェックを使用して、2つのテキスト入力を取得して連結し、それらのmd5を作成して、POSTを介して送信することもできます。他のサーバーでこれとVoilaを確認してください。

于 2012-08-17T14:33:32.450 に答える
0

たとえば、キーを生成してデータベースに保存する新しいリソースをサーバーに追加できます。hiddenWeb ページが読み込まれると、サーバーから新しいキーを要求し、それをフォーム フィールドに挿入します。

次に、リクエストが行われたときに、このフィールドの値をチェックして、データベースに対応するキーがあることを確認します。そうでない場合は、リクエストを破棄します。

もちろん、ボットが (キーを要求することによって) これを回避することは依然として可能ですが、それは難しくなります。

于 2012-08-17T10:00:00.693 に答える