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


32

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

残念ながら、悪意のあるサイトや感染したサイトは同じ機能を使用して「ねえ!あなたのコンピュータで見つけることについて絶対嘘をついていない111ウイルスに対処するためのマルウェアアンチウイルスをインストールしていません!」と言います。 「このページに留まる」オプションは、「安全を守ってください。製品をインストールする」や「足を踏み入れる」などのオプションに置き換えられます。これは役に立ちません!

Javascriptは厄介なことができます。明らかに悪意のあるサイトを離れないようにするために、これらのダイアログの1つを取得した場合、応答はどうなりますか?[このページを離れる]またはテキストを置換したものをクリックしても安全ですか?サイトがボタンの動作を変更したり、ボタンをクリックしたときに攻撃者が望むことを実行する独自の偽のダイアログを表示して移動する試みをインターセプトできますか?


1
プロセスエクスプローラーまたはその同等のものからブラウザープロセス全体を強制終了します。ボタンが実際に言うことを知らないので、はるかに安全です。
ジャーニーマンオタク

回答:


24

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

ダイアログが長すぎてボタンが画面から外れている場合は、を押しEnterてページを閉じることを確認できます。

キーボード(タッチスクリーンデバイス)をお持ちでない場合は、以下のブックマークレットを使用するか、SimpleSimonの回答をご覧ください(Chromeのみ)。


さて、いくつかの詳細。

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

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

Firefox 3.6のスクリーンショット

もちろん、ユーザーに任意のテキストと[ OK] / [キャンセル]ボタンだけでポップアップを表示できるようにすると、遅かれ早かれ一部の人がそれを使用することを確信できます。

Firefox 3.6の悪意のあるウィンドウのスクリーンショット

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

Firefox 23のスクリーンショット

Chromeはカスタムテキストを表示しますが、ユーザーに何をしたいかを尋ねる質問を常に追加し、ボタンはアクションを明示的に示します(ただし、「猫の動画」メッセージが表示される傾向があります!)

Chrome 29のスクリーンショット

以下はInternet Explorer 10でもあります。これは "cat-prone"です:

IE 10のスクリーンショット

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

したがって、最も重要なことをまとめると:

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

onbeforeunload必要に応じてイベントを無効にして、ページから退去または滞在を求められないようにすることができます。これがクロスブラウザのユーザースクリプトです。(リンクが停止している場合はスクロールダウンしてください)

悪意のあるポップアップを表示している特定のWebサイトを開いているときに、[ Leave ]をクリックするのがまだ怖い場合は、ブックマークレットを作成して削除できます。ブックマークバーを右クリックして、[ 新しいブックマーク(または同等のもの)]を選択しこれを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>

userscriptリンクは今は死んでいるようですので、ここに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);

2
2番目のボタンで[OK]を押します。結局、猫の動画をもっと欲しくないのは誰ですか?
ダニエルRヒックス

Ooh、ダイアログを無効にするJavascript。いいね!
user2357112は

悲しいことに、そのユーザースクリプトはいくつかのウェブページで信頼性の高い動作をしていません。window.onbeforeunloadおよびwindow.onunloadがnullであるにもかかわらず、ダイアログが引き続き表示されます。私は彼らがそれをどうやって管理しているのかわかりません。ハンドラーはある時点で上書きされ、おそらくいくつかのonclickイベントでnullに戻すと思います。
アタン

10

実際、FireFoxにはかなり気の利いた(そして簡単な)ソリューションがあります。入力した場合

about:config

アドレスバーに移動してから、下にスクロールして

dom.disable_beforeunload

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


7

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

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

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

または、chrome:// hangを使用してタブをハングアップし、JavaScriptを実行せずにタブを閉じます。

これが他のブラウザで可能かどうかはわかりません。


これらのページの新しいバージョンでは、マウスクリックやキー押下などのユーザーアクションで別のポップアップがスローされるため、chrome:// crash
rsaxvc

1

これはwindow.onbeforeunloadイベントであり、Webブラウザの機能です。したがって、これは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/en-us/library/ms536907%を参照してください。 28VS.85%29.aspx


0

「ポップアップ」とその意図/アクションを信頼していない場合の簡単な回避策:

Chromeの場合:

  • エスケープしてポップアップを削除する

  • ページを右クリック

  • 検査を選択

  • 上にスクロール

  • タグを右クリック

  • ノードを削除

  • タブを閉じる

他のブラウザにも同様のオプションがあるはずです。


3
迅速な回避策:常に[ このページを離れる ]をクリックします ;)
gronostaj
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.