web-dev-qa-db-ja.com

悪意のある「ナビゲーションの確認」ダイアログ?

StackExchangeなどの一部のサイトでは、「このページから移動しますか?」というポップアップが表示されます。投稿がある場合など、特定の条件下でダイアログを閉じようとすると、編集が完了していません。これは役に立ちます。

残念なことに、悪意のあるサイトや感染したサイトでも、同じ機能を使用して次のように述べています。 マルウェア私たちは間違いなくあなたのコンピュータ上で見つけることについてうそをついていない111のウイルスに対処するためのウイルス対策!」と「このページを残す」と「このページに留まる」オプションは「安全であること」のようなものに置き換えられます。私たちの製品をインストールし、そして「自分の足で撃ってください」これは役に立ちません!

Javascriptは厄介なことをすることがあります。私が明らかに悪意のあるサイトを離れようとしないようにこれらのダイアログの1つを取得しようとするとき、私の応答はどうあるべきですか? [このページをそのままにする]をクリックしても安全ですか。サイトがボタンの動作を変更したり、攻撃者がボタンをクリックしたときに望んでいたような、別の場所に移動して偽のダイアログを描こうとする試みを阻止することはできますか?

32
user2357112

これらのダイアログのいくつかが言っていることにもかかわらず、彼らは悪意のあることをすることはできません。いつでもOKまたはページを離れるをクリックして問題のないページを閉じることができます。

ダイアログが長すぎてボタンが画面の外にある場合は、を押してください。 Enterページを閉じることを確認するために

キーボード(タッチスクリーンデバイス)がない場合は、下のブックマークレットを使用するか、 SimpleSimon's answer (Chromeのみ)を参照してください。


今、いくつかの詳細。

ページが閉じているときに何らかのアクションを実行するには、 onbeforeunload イベントを使用する方法しかありません。もちろん、これはユーザーに対して簡単に使用できます(たとえば、彼がページを閉じようとすると、新しいウィンドウでそのコピーが開きます)ので、非常に制限されています。

実際にできる唯一の合理的なことは、カスタムテキストと2つのボタンを持つダイアログを開くことです。1つはページを離れるため、もう1つは残ります。そのダイアログでページができることだけがそのテキストを定義することです。ボタンとタイトルバーは不変です。これはFirefox 3.6からのスクリーンショットです:(Firefoxの非常に古いバージョン)

Screenshot from Firefox 3.6

もちろん、任意のテキストとちょうどOK /キャンセルボタンを使ってポップアップを表示させると、すぐにそれを確認できます。後で何人かの人があなたに対してそれを使うでしょう。

Screenshot of a malicious windows from Firefox 3.6

上のスクリーンショットでOKは単に「このページを離れる」という意味ですが、カスタムの説明ではそれ以上のことを示唆しています。ブラウザはダイアログを変更したため、誤解を招くようにするのは困難です。たとえば、最近のバージョンのFirefoxはカスタムテキストを無視するようです。

Screenshot from Firefox 23

Chromeはカスタムテキストを表示しますが、ユーザーに何をしたいのかを尋ねる質問を常に追加し、ボタンにはそれらのアクションを明示的に示します(ただし、それでも「猫のビデオ」メッセージが出やすい)。

Screenshot from Chrome 29

これはInternet Explorer 10で、「猫が発生しやすい」ものです。

Screenshot from IE 10

Opera 12はonbeforeunloadイベントを無視するだけで、そのようなタブを閉じようとすると他のタブと同じように閉じます。ただし、最新のOperaはテストしていません。

だから、最も重要なことをまとめると:

  • ページはテキストを含むダイアログを表示できません。 Webサイトはブラウザにカスタムテキストを含むダイアログを表示するよう要求することができますが、ブラウザはそれを完全に無視する(Opera)、一般的なテキストを使用する(Firefox)、または明示的に何が起こるか(Chrome、IE)を指定できます。
  • ダイアログの詳細は使用しているブラウザによって異なりますが、ボタンは常に不変です。どちらが何をしているのか明示的に言わないのであれば、OKは「このページを離れる*およびキャンセルは」という意味です。ここにいて"。
  • あなたがそれらを残すことにした場合、Webサイトは悪意のある行動を実行することはできません。あなたのファイルは猫のビデオに置き換えられることはありません、あなたは135234ウイルスであふれることはありませんし、FBIはあなたがあなたのコンピュータに違法なソフトウェアがあることを知らされることはありません。

必要に応じてonbeforeunloadイベントを無効にすることで、ページからの退席または滞在の確認を効果的に防ぐことができます。これはクロスブラウザです serscript 。 (リンクが切れている場合は下にスクロールします)

悪意のあるポップアップが表示されている特定のWebサイトを開いていても、[終了]をクリックするのが怖い場合は、ブックマークレットを作成して削除できます。ブックマークバーを右クリックし、新しいブックマーク(または同等のもの)を選択し、これをURLとして貼り付けます。(上記のリンクからの最小のコードです)

javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);

それからそのブックマークをクリックするだけでポップアップはアクティブページから一時的に削除されます。

これらのポップアップがブラウザでどのように見えるか、またはブックマークレット/ユーザスクリプトをテストする場合は、次のコードを含むテキストファイルを作成して.htmlファイルとして保存します。

<html><body onbeforeunload="return 'My custom text.'">_</body></html>

ユーザースクリプトのリンクは現在無効になっているようですので、 archive.org cache から抜粋したコピーを次に示します。元のスクリプト作成者のためのすべてのクレジット。

// ==UserScript==
// @name           Disable - remove onbeforeunload
// @namespace      
// @description    Disable - remove the annoying onbeforeunload event
// @include        *
// @author         netvisiteurs.com
// ==/UserScript==

var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);
24
gronostaj

実際には、FireFoxにはかなり気の利いた(そして簡単な)解決方法があります。あなたがタイプするなら

about:config

アドレスバーに移動し、次に下にスクロールします。

dom.disable_beforeunload

そしてその値をTrueに設定すると、Leave Pageポップアップは表示されなくなります。 FireFoxで。残念ながら、Chromeにも同様の回避策はありません。

10
Reverend Jim

Chromeで最も簡単な解決策はタブをクラッシュさせることです。

アドレスバーにchrome:// crashを入力し、ブックマークとして保存します

次回そのようなページを離れたい場合は、ブックマークをクリックするだけで、他のタブに影響を与えることなく、そのタブを即座に削除できます。他の人が示唆しているように、ブラウザセッション全体を終了する必要はありません。

あるいは、chrome:// hangを使用してタブをハングさせ、JavaScriptを実行せずに単にタブを閉じることもできます。

他のブラウザでこれが可能かどうかわからない。

7
SimpleSimon

これはwindow.onbeforeunloadイベントであり、Webブラウザの機能です。それでこれはウェブブラウザの固定されたダイアログであるべきです。あなたは別のブラウザで試すことができますので、あなたが見ることができるように、ダイアログは異なるデザインになっています。

しかし、私はあなたがJavaScriptを使ってポップアップを開発することができると思います。それはブラウザのものの元のポップアップと非常によく似ているように見えます。そしてそれが良い開発者であれば、彼はダイアログを表示する前にブラウザの種類もチェックするでしょう。 ;)

そのため、元のダイアログについて非常に確実にするために、正しいダイアログを並行してクロスチェックする必要があります。つまり、 http://samples.msdn.Microsoft.com/workshop/samples/author/dhtml/refsです。 /onbeforeunload.htm

イベントの詳細については、こちらを参照してください。
https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload
http://msdn.Microsoft.com/ja-jp/library/ms536907%28VS.85%29.aspx

1
Chris

あなたが「ポップアップ」とその意図/行動を信頼しない場合の素早い回避策:

Chromeの場合:

  • ポップアップを削除するためのエスケープ

  • ページを右クリック

  • 検査を選択

  • 上にスクロールする

  • タグを右クリック

  • ノードを削除

  • タブを閉じる

他のブラウザも同様のオプションを持っていると思います。

0
George 2.0 Hope