3

私はオンラインゲームのウェブサイトで働いていました。JavaScript関数を呼び出すイベントがいくつかあり、関数にはコールバックのあるアクションがあります。

このようなもの、

 <input type="button" onclick="changeSomething"/>


 function changeSomething() {
         /// some call back, which changes something 
 }

これを知っている人なら誰でも、ブラウザーのアドレス バーからこの changeSomething を呼び出すことができますが、これは望ましくありません。

誰かがそれをする可能性は非常に低いですが、私はそれを許可したいと思います.

このような状況を防ぐ方法はありますか?

ありがとう。

PS試してみましたが、十分に説明したかどうかはまだわかりません。届かないことがありましたらお知らせください。

4

5 に答える 5

4

どんなテクニックを試しても、100% 保護されることはありません。負け試合です。

目標に近づく 1 つの方法は、onclick 属性を完全に削除し、javascript を介してクリック ハンドラー (つまり、「changeSomething」) をバインドすることです。

html:

<input id="foo" type="button" />

js:

addEvent(document.getElementById("foo"), 'click', function() {
    /// some call back, which changes something
})

その場合、コールバックは匿名になります (たとえば、「changeSomething」関数はもうありません)。これらの悪意のあるユーザーは、その名前を知らなければ直接呼び出すことはできません!

このテクニックを回避する方法はまだありますが、悪人にアイデアを与えないように、それらについては言及しません :)

(ところで addEvent は、イベント ハンドラーを追加するための単なるサンプル ライブラリ関数です。アクセスできると確信しています。そうでない場合は、ここにアクセスしてください。)

于 2009-01-08T15:14:54.070 に答える
3

これについてあなたができることは何もないと思います。クライアントは、自分のブラウザー内で必要なものを何でも実行できます。唯一のことは、サーバー側ですべてを検証することです。これは、すべての Web プログラミングにおいて重要な概念です。クライアント側のコードは自由に変更できるため、セキュリティ メソッドではなく、高速化のための追加チェックとして扱う必要があります。

于 2009-01-08T15:05:57.553 に答える
1

リクエストを受け入れたバックエンドでこれを処理する必要があります。特定の条件でのみユーザーにオプションを与えると仮定するとdoSomething()、おそらくこの情報がデータベース (または何でも) に存在します。

JavaScript が呼び出されることを心配する必要はありません (それを回避する方法はありません)。フロントエンドで行ったのと同じチェックをバックエンドで行います。この方法では、とにかくフロントエンドを保護することを忘れることができます... それでも、悪意のあるユーザーdoSomethingが想定されていないときに ing するのを防ぐことができます.

私が言いたいことをさらに明確にする必要がある場合はお知らせください。ただし、アプリのアーキテクチャがどのようなものかについて、さらに詳細が必要です。

于 2009-01-08T17:12:55.703 に答える
0

どんな「解決策」も Web ページで右クリックを無効にするのと同じくらい効率的です... 後者の問題については、Opera でページを表示するなど、少なくとも 10 の回避策を見つけました!

これを無効にすると、Firebug、Greasemonkey、またはその場で HTML を変更する何らかのプロキシで回避できます。ページのローカル コピーなどを使用することは言うまでもありません。

于 2009-01-08T15:47:23.960 に答える
-2

ID を渡すことで、クリックのソースを確認できます。

<input id="good' type="button" onclick="changeSomething(this.id)"/>

 function changeSomething(myId) {
   if(myId!='good') {
    return;
  }

 //......code
}

改訂:

<input id="good' type="button" onclick="changeSomething(this)"/>

     function changeSomething(myId) {
       if(myId.id!='good') {
        return;
      }

     //......code
    }
于 2009-01-08T15:01:59.633 に答える