31

ブラウザでは、拡張機能がコードを挿入したり、DOM を操作したりできます。

何年にもわたって、Firefox、Chrome、Internet Explorer (すべてのバージョン) の未知のブラウザー拡張機能によって生成された、見ている Web サイト (アプリ) で (window.onerror を使用して) キャッチされないエラーが多数あることに気付きました。

これらのエラーは何も中断していないようです。クレジット カードの処理を開始するため、この Web サイトのセキュリティを強化したいと考えています。私は自分の目で、変更されたブラウザー拡張機能 (無害なブラウザー拡張機能、攻撃者/スクリプトキディに報告するように変更されたもの) を使用してブラウザーに感染するマルウェア/スパイウェアを、キーロガーとして機能させているのを見てきました (簡単な onkey* イベントハンドラーを使用するか、input.value チェックのみを使用します)。

標準または非標準のコード インジェクションまたは DOM の読み取りを許可しないようにブラウザに通知する方法 (メタ タグなど) はありますか? Web ページはすでに SSL になっていますが、これは問題ではないようです (拡張機能のより厳格なセキュリティを有効にするようにブラウザーにヒントを与えるなど)。

.

他の人または私の頭の上から提案された可能な回避策(一種のストレッチと単純なメタタグ):

  • 数字を入力するための仮想キーボード + 非テキスト入力 (数字の別名 img)
  • Flash を使用したリモート デスクトップ (誰かが HTML5 を提案しましたが、それはキーボード イベントをリッスンするブラウザー拡張機能を解決しません。Flash、Java などだけが解決できます)。
  • 非常に複雑な Javascript ベースの保護 (ホワイト リストに登録されていないイベント リスナー、メモリ内の入力値、および実際のアスタリスク文字で保護された入力などを削除します) (既に存在しない限り、実行できません)
  • ウイルス対策の役割を持つ、または何らかの方法で特定の Web ページを保護できるブラウザ拡張機能 (これは実現不可能であり、膨大な数の問題を引き起こさない限り不可能かもしれません)

編集: Google Chrome はシークレット モードで拡張機能を無効にしますが、シークレット モードを検出または自動的に有効にする標準的な方法がないため、永続的な警告を表示する必要があります。

4

6 に答える 6

14

誰かのブラウザ拡張機能を無効にできるということは、通常、ブラウザを乗っ取ることを意味します。ありえないと思います。それは大きなセキュリティ上のリスクになります。あなたの目的は正当かもしれませんが、ウェブマスターがプログラムでアドブロッカーを無効にして、ユーザーに広告を表示させるシナリオを考えてみてください。

最終的には、オンライン バンキング取引を行う際にクリーンな OS を使用していることを確認するのはユーザーの責任です。ユーザーが侵害されたのは Web サイトのせいではない

更新 まとめましょう。何かのようなもの:

<meta name="disable-extension-feature" content="read-dom" />

また

<script type="text/javascript">
    Browser.MakeExtension.MallwareLogger.to.not.read.that.user.types(true);
</script>

は存在せず、近い将来実装されないと確信しています。現在の最新の既存のテクノロジーを最大限に活用し、セキュリティに関してできる限り最善の方法でアプリを設計するために必要なあらゆる手段を使用してください。そもそもインターネットで支払いをするつもりのないユーザーをカバーしようとしてエネルギーを無駄にしないでください

于 2012-09-19T12:21:32.590 に答える
5

更新 (2019-10-16):これは「本当の」解決策ではありません。つまり、セキュリティ ポリシーとしてこれに頼るべきではありません。真実は、悪意のあるアドオンが検出できない方法で JavaScript をハイジャック/なりすましできるため、「本当の」解決策がないということです。以下の手法は、単純なキーのログ記録を防ぐ方法を理解するための演習のようなものでした。この手法を拡張して、ハッカーにとってより困難にすることもできます...しかし、 Vlad Balmos は以下の回答で最もよく言っています。最初の場所。


JavaScript プロンプトを使用して、キーのログ記録を回避できます。私は小さなテストケースを書きました (それは少し手に負えなくなりました)。このテスト ケースでは、次のことを行います。

  • prompt()を使用して、フォーカス時にクレジット カード番号を尋ねます。
  • ユーザーが「追加のダイアログを防止する」にチェックを入れたとき、またはユーザーが何らかの方法で CC フィールドに入力できる場合に、フェールセーフを提供します。
  • イベント ハンドラーが削除またはスプーフィングされていないことを定期的にチェックし、必要に応じてユーザーに再バインド/警告します。

http://jsfiddle.net/ryanwheale/wQTtf/

prompt('Please enter your credit card number');

IE7+、Chrome、FF 3.6+、Android 2.3.5、iPad 2 (iOS 6.0) でテスト済み

于 2012-09-28T10:05:42.953 に答える
2

あなたの質問は興味深いもので、思慮深い (+1 された) ものですが、残念ながら、提案されたセキュリティは実際のセキュリティを提供しないため、ブラウザがそれを実装することはありません。

ブラウザー/Web/ネットワーク セキュリティの中心となる原則の 1 つは、偽のセキュリティ機能を実装したいという欲求に抵抗することです。この機能を使用すると、使用しない場合よりも Web の安全性が低下します。

聞いてください:

クライアント側で実行されるものはすべて操作できます。ブラウザーは、サーバーと対話する別の HTTP クライアントです。サーバーは、計算結果やフロントエンド Javascript で行われたチェックを決して信頼してはなりません。拡張機能を使用してブラウザで実行される「セキュリティ」チェック コードを誰かが単純にバイパスできる場合、HTTP リクエストをサーバーに直接送信することができますcurl。少なくともブラウザでは、熟練したユーザーは、Web サイトをデバッグするときと同じように、Firebug または Web Inspector を使用してスクリプトをバイパスできます。

拡張機能の<meta>挿入を停止するタグは、Web サイトをより堅牢にしますが、より安全ではありません。強力な JavaScript を作成する方法は、悪意のある拡張機能がないことを祈るよりも無数にあります。それらの 1 つであるグローバル関数/オブジェクトを非表示にし、別の環境サニティ チェックを実行します。たとえば、GMail は Firebug をチェックします。多くの Web サイトで広告ブロックが検出されます。

この<meta>タグは、プライバシーの観点から意味があります (これもセキュリティではありません)。DOM に現在存在する情報は機密情報 (銀行の残高など) であり、第三者に公開してはならないことをブラウザーに伝える方法が必要です。しかし、ユーザーがベンダー A の OS、ベンダー B のブラウザー、ベンダー C の拡張機能を、そのソース コードを読んで正確に理解することなく使用している場合、ユーザーはこれらのベンダーに対する信頼を既に表明しています。ここであなたのウェブサイトに問題はありません。プライバシーを本当に気にかけているユーザーは、信頼できる OS とブラウザーに目を向け、別のプロファイルまたはブラウザーのプライベート モードを使用して機密情報を確認します。

結論:すべての入力チェックをサーバー側で (再度) 行う場合、Web サイトは十分に安全であるため、<meta>タグを付けても安全性を高めることはできません。素晴らしい!

于 2012-09-26T09:19:36.113 に答える
1

これはうまくいきませんが、document.createElement = function(){}; について何か試してみます。これは、クライアント側のスクリプト (greasemonkey) に影響するはずです。

非表示の入力を使用して現在の DOM を送信し、 myform.onsubmit=function(){myform.hiddeninput.value=document.body.innerHTML;}サーバー側で不要な DOM 要素をチェックすることもできます。すべての要素でサーバー側で生成された id/token を使用すると、ここで役立つと思います (挿入された DOM ノードは確実にそれを見逃すため)。

=>ページは次のようになります

<html uniqueid="121234"> <body uniqueid="121234"><form  uniqueid="121234"> ...

したがって、POST アクションで追跡されていない要素を見つけるのは簡単なはずです (たとえば、xpath を使用)。

<?php
simplexml_load_string($_POST['currentdom'])->xpath("*:not(@uniqueid)") //style

DOMインジェクションの問題については、その周りの何か。

キーロギングの部分については、クライアント側の観点からキーロガーを防ぐために何もできないと思います(仮想キーボードなどを使用する場合を除く)。ブラウザーの内部からそれらを識別する方法がないためです。偏執狂的である場合は、100% キャンバスで生成されたデザイン (HTML 要素とインタラクションを模倣) を試す必要があります。これはあなたを保護する可能性があるためです (DOM 要素にバインドする必要はありません)。ただし、それはブラウザーでブラウザーを作成することを意味します。

于 2012-09-24T23:02:14.600 に答える
1

コードから拡張機能を明示的にブロックできないことは誰もが知っていることですが、もう 1 つの方法は、パスワード、ssn などのキー フィールドに関連付けられたイベント リスナーのリストと、キープレス、キーアップ、キーダウンなどの本体のイベントを見つけて、アドオンを無効にするためにフラッシュメッセージをスローするだけでなくても、リスナーはコードに属しています。

また、突然変異イベントをページに添付して、コードとは別にサードパーティによって作成/生成された新しいノードがあるかどうかを確認できます。

パフォーマンスの問題が発生することは明らかですが、それはセキュリティとのトレードオフです。

テイカーは?

于 2012-09-28T05:27:08.707 に答える
1

保護は別の方法で行われていましたが、同様のことが何度も行われているのを見ました。かなりの数のサイトで、機密情報をテキスト形式で提供する場合、Flash ウィジェットを使用してテキストを表示していました (たとえば、電子メールボットによって発見され、スパムされたアドレス)。

Flash アプレットは、HTML ページからのコードを拒否するように構成されている場合があります。実際には、これが可能であると特に期待しない限り、そのままでは機能しません。また、Flash はイベントをブラウザに再送信しないため、キーロガーがブラウザ レベルで機能する場合、押されたキーをログに記録できません。確かに、Flash には独自の欠点がありますが、他のすべてのオプションを考慮すると、これが最も実現可能なものと思われます。そのため、Flash 経由のリモート デスクトップは必要ありません。単純な組み込みアプレットで十分です。また、完全に機能するリモート デスクトップ クライアントを作成するために Flash だけを使用することはできません。NaCl または JavaFX を検討する必要があります。これにより、企業ユーザーのみが使用でき、最終的には個人ユーザーのみが使用できるようになります。

その他の考慮事項: 独自の拡張機能を作成します。Firefox 拡張機能の作成は非常に簡単です + JavaScript も使用できるため、多くの JavaScript コードを再利用できます。私は Google Chrome や MSIE の拡張機能を書いたことはありませんが、それほど難しくはないと思います。ただし、それをウイルス対策拡張機能に変える必要はありません。利用可能なツールを使用して、他の拡張機能が自分の拡張機能内で何が起こっているかを盗聴できないようにすることができます。あなたの聴衆がそれをどれほど友好的に歓迎するかはわかりませんが、企業部門をターゲットにしている場合、その聴衆はある意味で非常に良いものです.彼らはツールを選ぶことができないので.拡張機能の使用を義務付けることができます。

他にアイデアはありますか?- まあ、これは非常に簡単で効率的です: ユーザーにポップアップウィンドウ/別のタブを開いてもらい、そこで JavaScript を無効にします:)つまり、JavaScript が有効になっている場合、クレジットカード情報の受け入れを拒否できますブラウザ - 明らかに、確認は非常に簡単です。これには、ユーザーが設定を見つけるために精神的な努力が必要であり、それを無効にすることができます + 彼らはポップアップウィンドウに激怒します...しかし、ほぼ確実にこれはすべてのコードインジェクションを無効にします:)

于 2012-09-22T00:45:21.373 に答える