0

1 ページ (~30) に複数のフォームがあり、ファイルのアップロードが含まれるものもあります。

各フォームには、独自の送信ボタンがあります。

構造は、bootstrap-tab と -collapsebox-design です。つまり、リロードせずにタブを変更し、「コントロール パネル」のすべてのフォームにアクセスできます。

すべてのフォームに対して "mysql inject me" (Firefox プラグイン) を実行しようとしましたが、結果は次のとおりです。

サーバーはエラー 500 で応答しました。

何も変わらず、5分待たなければならず、すべてが再び大丈夫でした.

私の質問は次のとおりです:これらのフォーム (サーバー側) の高速な自動/ユーザー送信を防ぐにはどうすればよいですか? とにかくそれは可能ですか?そのため、ユーザーごとに ~ 1 秒ごとに 1 つだけ送信できます。

4

3 に答える 3

1
  1. ユーザーにセッションを与える
  2. last-submitという名前のセッションで変数を定義し、現在の時刻を値として指定します。
  3. フォームの結果が入ってきたら:
    1. last-submit の値を確認してください。
    2. x秒以上前の場合は、時間を最後の送信として保存し、それぞれ応答ます
    3. x秒未満の場合は、フォームを拒否し、それぞれ応答します。

ロボットまたはスクリプトを防止する場合は、次のことも行います。

  1. 入力フィールドをフォームに追加し、_robo_trap_ という名前を付け、スタイルを に設定して人間の目には見えないようにしdisplay: noneます。
  2. フォームにrobo_trap値があるかどうか、またはそのデフォルト値がすでに変更されているかどうかがチェックされます。もしそうなら、人間はそれを見ることができず、記入する必要がないので、フォームを破棄してください。

例えば:

<?php

/* User Session */
session_start();

/* Current Time */
$now = new DateTime();

/* First Time ... */
if ( empty($_SESSION['last-submit']) ) {
    $_SESSION['last-submit'] = $now;
}

/* On Form Submit ... */
if ( !empty($_POST) ) {

    /* How fast?! */
    $gap = now->diff( $_SESSION['last-submit'] );
    $gap = $gap->format('%s');

    if ( $gap > 1 ) {

        // good ...

        $_SESSION['last-submit'] = $now;

    } else {

        // bad ...
    }
}

PSいくつかのアイデアを提供するためのサンプルコードにすぎません。テストはしていません。

于 2013-11-11T08:14:10.363 に答える
1

ユーザーの ID を含む MySQL テーブルを作成し、「last_submit」という行をdatetime.

ユーザーが何かを送信するたびに更新します。

次に、PHP に、最近何かを送信していないことを確認してもらいます。

于 2013-11-11T08:06:05.713 に答える
0

他のフォーム送信アクションを一時的に無効にすることができます:

$(document).ready(function(){

    $(':input[type="submit"]').click(function(){

         var otherButtons = $(':input[type="submit"]').not($(this));
         otherButtons.prop('disabled', true);

         setTimeout(function(){
             otherButtons.prop('disabled', false);
         },
         1000); //disable for 1 second


    });

});

サーバー側では、次のように再送信チェックを行うことができます: PHP avoid browser reposting $_POST on page refresh?

于 2013-11-07T13:49:51.563 に答える