ホームページ > 記事 > ウェブフロントエンド > Web フロントエンドのセキュリティ攻撃と防御_html/css_WEB-ITnose
FEX は最もプロフェッショナルなフロントエンドです
すべての外部リンク リソースは禁止されています
外部リンクはオフサイトリクエストを生成するため、CSRF 攻撃の実行に悪用される可能性があります。
現在、国内の多数のルーターにCSRFの脆弱性が存在しており、相当数のユーザーがデフォルトの管理アカウントを使用しています。外部リンクの画像を介して、ルーターの DNS 構成の変更を開始できます。これは、国内のインターネットにおける最大のセキュリティ リスクとなります。
ケースのデモ
Baidu Travel は、リッチ テキストをフィルタリングするときにタグの style 属性を考慮しなかったため、ユーザーがカスタマイズした CSS が生成されました。したがって、オフサイト リソースを挿入できます:
このページを閲覧しているすべてのユーザーは、任意の URL に対するリクエストを開始できます:
-サイトサーバー 完全に制御不可能ですが、攻撃者は返されるコンテンツを制御できます:
管理者または外部リンクチェックサーバーであることが検出された場合、通常の画像を返すことができます
デモでは、いくつかの投稿がランダムにテストされ、2 日間で収集されました500 件を超える画像リクエストがあり、10 近くの異なる IP が DNS クエリを開始し始めました。
仲介プロキシを通じて、ユーザーのプライバシーがすべて取得される可能性があります。さらに深刻な結果があります。トラフィックハイジャックの危険性についての議論をチェックしてください。
ホットな投稿で「炎上する前に名前を残す」場合、その数はこれらよりもはるかに多くなるでしょう。
ポストスクリプトを使用して一括返信すると、数万のユーザーネットワークが乗っ取られます。
予防措置
すべての外部リンク リソースをユーザーから排除します。サイト外から画像が必要な場合は、画像を取得してオンサイトのサーバーに保存できます。
リッチ テキスト コンテンツの場合は、ホワイトリスト戦略を使用して、特定の CSS プロパティのみを許可します。
コンテンツ セキュリティ ポリシーの構成を可能な限り有効にして、ブラウザーの最下層がオフサイト リソースを傍受できるようにします。
リッチ テキスト フロントエンド スキャン
リッチ テキストは、XSS にとって最も大きな影響を受ける領域です。
リッチ テキストの本質は、HTML 文字の段落です。歴史的な理由により、HTML は多くの非標準的な使用法と互換性があり、フィルタリングがより複雑になっています。 XSS インジェクションは、リッチ テキストを使用するほぼすべての製品で発生しています。
ケースのデモンストレーション
旅行投稿はリッチ テキストをサポートしています。デモンストレーションを続けてみましょう。
以前から何度か修正されているため、現在はembedタグとsrc属性のみ挿入可能です。
それでも、フレーム ページを埋め込むことはできます。
XSS はオリジナル以外のソースから実行されるため、メイン ページの情報を取得できません。ただし、top.location を変更して、ページをサードパーティのサイトにジャンプすることができます。
同じインターフェースを偽装するには、元のページを全画面 iframe に埋め込みます。次に、フローティング レイヤーのログイン ボックスを使用して釣りをします。
つまり、実行可能要素がリッチ テキストに表示されると、ページのセキュリティが大きく損なわれます。
予防策
ここではバックエンドのフィルタリング方法については考慮しませんが、フロントエンドの予防ソリューションの使用について説明します。
攻撃者がさまざまなトリックを使用しても問題ありません。バックエンドのフィルタリングをバイパスしますが、これらの HTML 文字は最終的にフロントエンドで要素に構築され、レンダリングされます。
したがって、DOM の構築後、レンダリング前に、画面外の要素をリスク スキャンできます。実行可能要素 (スクリプト、iframe、フレーム、オブジェクト、埋め込み、アプレット) をキャッシュから削除します。
または、危険な要素にサンドボックス分離属性を追加します。
実装の詳細については、以下を参照してください。 http://www.etherdream.com/FunnyScript/richtextsaferender.html
リッチ テキストが静的ページに直接入力される場合は、以下を考慮してください。 MutationEvent を防御に使用します。詳細なリファレンス: http://fex.baidu.com/blog/2014/06/xss-frontend-firewall-2/
ただし、よりスケーラブルで消費量が少ない動的レンダリングを使用することをお勧めします。最低限のパフォーマンス。
オープナー フィッシングへジャンプ
ブラウザは、ソース ページにアクセスするためのポップアップ ウィンドウにオープナー属性を提供します。ただし、この仕様の設計は合理的ではないため、オープナーを使用できるハイパーリンクを通じてページが開かれることになります。
したがって、ユーザーが Web サイト内のハイパーリンクをクリックすると、元のページが開かれたサードパーティのページによって制御されてしまいます。
どちらも同一生成元ポリシーによって制限されていますが、第三者は元のページのコンテンツにアクセスできませんが、元のページにジャンプすることはできます。
ユーザーの注目は新しく開いたページにあるため、元のページは静かにリダイレクトされ、ユーザーは気づきにくくなります。ユーザーが元のページに戻ると、実際には別のフィッシング Web サイトにアクセスしています。
ケースのデモ
Baidu Tieba が現在使用しているハイパーリンクは新しいウィンドウにポップアップ表示されるため、この欠陥も存在します。
攻撃者はユーザーを惹きつける投稿を投稿します。ユーザーがアクセスしたら、ハイパーリンクをクリックするように誘導します。
通常、ユーザーが最初にプレビューできるように、少数の写真や動かないアニメーションが意図的に配置されます。ユーザーが全体像を見たい場合は、次のハイパーリンクをクリックする必要があります:
拡張子は gif などの画像形式であるため、ほとんどのユーザーは心配することなくクリックします。 。
実際、実際のタイプはサーバーから返された MIME によって決まります。したがって、このオフサイト リソースが Web ページである可能性は十分にあります。
ユーザーがアニメーションを見るために新しいページに留まると、そこに隠されているスクリプトが静かにジャンプします。元のページ。
ユーザーが元のページに戻ると、実際にはフィッシング Web サイトにアクセスします:
これに加えて、フローティング ログイン ボックスなどの特殊効果を追加します。 、ユーザーのアカウント情報をフィッシングする可能性が非常に高いです。
予防策
この不具合はオープナー属性によって引き起こされるため、新しいページのこの属性をブロックする必要があります。
ただし、ハイパーリンクを通じて開かれた Web ページにはスクリプトからアクセスできません。 window.open を通じてポップアップされたウィンドウのみがそのオブジェクトを取得できます。
そこで、ユーザーがページに投稿したハイパーリンクのクリック イベントを監視し、デフォルトのポップアップ ウィンドウの動作を防止し、代わりに window.open を使用し、返されたフォームのオープナーを null に設定します。これにより、サードパーティによるページの改ざんが防止されます。
詳細な実装リファレンス: http://www.etherdream.com/FunnyScript/opener_protect.html
もちろん、実装は上記のデモほど複雑である必要はありません。実際の製品ラインに応じて、ユーザー領域のハイパーリンクを聞いてください。
ユーザー コンテンツの権限
カスタム ドレッシングをサポートする機会は、多くの場合、釣りにとって高リスクの領域です。
下心を持つ一部の人々は、変装を使用してシステム インターフェイスを模倣し、ユーザーを誘惑して餌を取るように仕向けます。
ケースデモンストレーション - スペース違反
Baidu Space では、ユーザーがカスタム形式でコンテンツを作成できます。
これは本質的にはリッチ テキスト エディターです。これは XSS の脆弱性を実証するものではありませんが、フィッシング インターフェイスを偽装するためにスタイル ドレッシングを使用します。
Baidu Space リッチ テキストは要素、一部の属性、CSS スタイルをフィルターしますが、class 属性のホワイトリストは有効にしないため、ページ上のすべての CSS クラス スタイルを独自のコンテンツに適用できます。
注意事項
ユーザーコンテンツのサイズ制限を指定します。これは投稿時にユーザーが決定できます。
悪意のあるユーザーが極端に大きなフォントを設定してページ全体の閲覧を妨害することを防ぐために、ユーザー コンテンツには無制限のサイズのスペースを割り当てないでください。
ページの他の部分への影響を避けるために、ユーザー定義のコンテンツを iframe に埋め込むことが最善です。
同じページ上に配置する必要がある場合は、ユーザー コンテンツが配置されているコンテナーを設定して、余分な部分が非表示になるようにする必要があります。これにより、予期せぬバグによってユーザーが製品インターフェイスの境界を越えるのを防ぎます。
ケースのデモンストレーション - 境界外の機能
カスタマイズされた装飾は通常、オフサイトのハイパーリンクをサポートします。
Tieba などの単純なプレーン テキストと比較して、リッチ テキストは画像などの他の要素にハイパーリンクを設定できます。
したがって、このタイプのリンクは非常にわかりにくく、ユーザーは誤ってクリックしてしまいます。前述の改変されたオープナー フィッシングを引き起こすのは簡単です。
画像の内容が偽装されている場合、ユーザーは危険な操作を引き起こしやすくなります。
前のエリア横断と組み合わせて使用すると、混乱はさらに混乱します:
予防措置
以前と同様、ユーザーが指定したハイパーリンクはクリック時にスキャンされます。オフサイト アドレスの場合は、バックエンドが URL に対してセキュリティ スキャンを実行できるように、バックグラウンド ジャンプを通じてアドレスを入力します。
サーバーが悪意のある Web サイトを検出した場合、またはターゲットのリソースが実行可能ファイルである場合は、ユーザーに危険性を知らせるために強力な警告を与える必要があります。
クリックジャッキングの検出
クリックジャッキングは古い攻撃方法であり、その基本原理については誰もが聞いたことがあるでしょう。これは、ユーザーが知らないうちに、非表示のフレーム ページのボタンをクリックすると、いくつかの重要な操作がトリガーされることを意味します。
しかし、Baidu の製品ラインのほとんどを含め、クリック ハイジャックを防御する人は現時点では多くありません。
ケースのデモ
クリックすることで直接完了できる、より意味のある操作は、ユーザーをフォローすることです。たとえば、Baidu Tieba の追加フォロー ボタン:
攻撃者は、ターゲット ボタンのサイズと座標を事前に計算し、独自のフレームにページをネストし、そのボタンのオフセットを設定します。次に、CSS スタイルを使用してターゲット ボタンを拡大し、ページ スペース全体を占有し、完全に透明になるように設定します。
現時点ではボタンは表示されていませんが、ページ上の任意の場所をクリックすると、フレーム ページのフォロー ボタンのクリックがトリガーされる可能性があります:
予防措置
事実、クリックジャッキングは非常に簡単に防御できます。
自分のページはサードパーティのページにネストされているため、ネストされているかどうかを知るには self == top を判定するだけで済みます。
フォロワーの追加や投稿の削除など、いくつかの重要な操作については、まずそれらがネストされているかどうかを確認する必要があります。サードパーティのページのフレーム内にある場合は、確認ボックスがポップアップ表示され、ユーザーに注意を促す必要があります。
攻撃者によって構築されたクリック領域が無効になるように、確認ボックスの座標位置に特定のランダムなオフセットを持たせることが最善です。
原文は → fex.baidu.com