ネタもと:[ASP.NET2.0]コンテキストメニューの制御について
[ASP.NET 2.0]メッセージボックス表示の画面状態
> しかし、Web アプリケーションの場合、正規の手順で操作されることだけ考えていてはいけません。
もちろん考えております。なので、画面そのものをロックしてしまおうかと考えています。
ご指摘ありがとうございます。
その件に関しましては、開発当初から話題に上がっておりました。
対策を考えるとキリがありませんが、検討しております。
ポップアップで画面を起動し、コンテキストメニューを無効にするとか・・・
Web アプリケーションにおいては、ユーザの操作を制御することでシステムを悪意から守ることは出来ません。
質問者は、コンテキスト メニューを表示しないようにすることで、「ソースを表示」を出さないようにしようとしています。同じように、window.open のときに、メニューも隠しているのでしょう。
しかし、間違ってはいけません。“ユーザが操作を間違えることを予防すること”と、“悪意のデータからシステムを守ること”は、まったく別です。
コンテキスト メニューを消す。ポップアップ ウインドウにする。最初のボタンクリックの後にボタンを使用不可にする。これらは、Windows アプリケーションであれば、悪意からシステムを守ることにかなり有効です。しかし、Web アプリケーションにおいては、ユーザが操作を間違えることを予防するための措置でしかなく、悪意のデータからシステムを守るためには、まったく貧弱です。
Opera や FireFox では、スクリプトを有効にしながら、コンテキスト メニューを操作するスクリプトだけを無効にすることが出来ます。IE と同じレンダリング エンジンを用いるものでも、Lunascape などのタブ ブラウザであれば、メニューやアドレス バーを消したウインドウをポップアップさせることは出来ません。
ブラウザは、システム構築者が作るものではないのです。自分が作ったものではないアプリケーションを、完全に自分の意志に従わせることは出来ません。
悪意のデータからシステムを守るためには、サーバ側のロジックを悪意のデータが送られてくる前提で考える必要があります。“悪意のデータを入力させない”、すなわち、クライアント側のスクリプトで悪意のデータを入力させないようにすることは出来ません。
対策を考えるとキリがありませんが、検討しております。
“送らせない”ための対策を考えると、確かにキリがありません。しかし、“受け取ったときに弾く”ように考えれば、キリがあります。受け取ったところで、望んだ状態かどうか、チェックすればいいのです。(さらっと書いたけど、実際は難しい→じゃぁ、どうすりゃいいのさ)
「自部署だけで使うものだからかまわない」、そういう返答をいただいたこともあります。しかし、せっかくの学ぶ機会を逸していいのでしょうか?次も、自部署だけで使うものを作るのでしょうか?次に、外部へ公開するものを作るとき、その時には対応しなければならないのです。その時に、もう一度考え直すのですか?それだったら、今、考えておきましょうよ。2回も考える必要はないでしょ?
投稿日時 : 2006年8月21日 21:39