0

今日、私は自分のWebアプリケーションにセキュリティホールを見つけました(SOで見つけることができなかったので、これが他の場所で言及されている場合はご容赦ください)。このコードを考えてみましょう:

<html>
    <head>
        <script>
            intv = setTimeout(function(){test()} , 10000);
            function test(){
                val = document.getElementById('tt').value;
                alert(val);
                intv = setTimeout(function(){test()} , 10000);
            }
        </script>
    </head>
    <body>
       <input type="hidden" value="10" id="tt">
    </body>
</html>

問題:

このコードは、10秒間隔で入力フィールドの値を警告します。最初のアラートの後、ソースコードを表示してブラウザの入力フィールド値を変更します。そして、それは私が後で追加した価値を警告します、それは私にとって良くありません。

実際のシナリオ:

生徒と教師の両方がクラスセッションに参加する仮想教室があります。5秒ごとにajaxリクエストを送信して、バックエンドでクラスの期間を更新し+5、dbに期間フィールドを追加します。その後、学生はクラスで費やした期間に応じて支払いを行う必要があります。賢い人がブラウザでソースコードを編集し、5秒後にリクエストを送信する代わりに、私のロジックをだますために1時間(議論のために)それに変更したのではないかと心配しています。クライアント側でのあらゆる種類の違法行為を防ぐ方法は?

4

2 に答える 2

0

彼らが行うすべてのリクエストを検出し(仮想教室の場合は何かがうまくいっていますか?)、サーバー側でどこかにアクセスしたときに保存します(データベース)。セッションの開始と終了のテーブルを用意します。

于 2012-11-14T16:49:04.703 に答える
0

ユーザーがJavaScript値を変更できないようにするためにできることは何もありません。

代わりに、サーバー上の入力を検証する必要があります。

この場合、コメントで示唆されているように、サーバー時間を使用して開始時刻と終了時刻をログに記録する必要があります。

于 2012-11-14T16:51:59.523 に答える