XSS の詳細な説明

XSSの詳しい説明

XSS
1. XSS の概要
(1) XSS の概要
XSS は、OWASP TOP 10 の 1 つです。

XSS中国語はクロスサイトスクリプティング(クロスサイトスクリプティング)と呼ばれ、本来の名前はCSSと略されるべきですが、CSS(Cascading Style Sheets、カスケーディングスタイルスクリプト)も名前が同じため、XSSと改名されました。XSS (クロスサイト スクリプティング攻撃) は、主に JavaScript (js) に基づいて悪意のある攻撃を実行します。

XSS は、Web アプリケーションによく現れるコンピューターの脆弱性であり、Web で最も主流の攻撃方法でもあります。では、XSS とは何でしょうか?

XSS とは、悪意のある攻撃者が Web サイトの欠点を利用して、ユーザーが送信したデータをエスケープまたはフィルターし、コードを追加して Web ページに埋め込むという事実を指します。他のユーザーを訪問させると、対応する埋め込みコードが実行されます。

これは、ユーザー情報を盗んだり、ユーザー ID を使用して特定のアクションを実行したり、訪問者がウイルス侵害を実行したりする攻撃方法です。

(2) XSS 原理
私たちが知っているあらゆる種類の黒魔術を使用して、Web ページに JS コードを挿入します。これにより、JS コードがブラウザーで実行できるようになり、ページにアクセスしたユーザーが攻撃されます。

(3) XSS の害
ユーザーにとって、
Cookie ハイジャックされたセッションの盗用、
フィッシング
、馬によるマイニング、
広告ブラシ トラフィック、
Web サービスの場合、
バックグラウンドのハイジャック (共通)、
ページの改ざん
、ワームの拡散、
イントラネット スキャン (共通
)タイプ
反射型:
反射型 非永続的とも呼ばれるこのタイプのスクリプトは、最も一般的かつ広く使用されており、主に URL アドレスのパラメータに悪意のあるスクリプトを添付するために使用されます。

ストレージ型:
攻撃者が構築した悪意のあるページをユーザーに送信し、ユーザーが一見正常なページにアクセスした後に攻撃を受けるこのタイプの XSS は、通常、URL 内の悪意のあるコードを直接見ることができず、強力な永続性と隠蔽性を備えています。

DOM
DOM タイプ XSS はバックエンドと対話する必要はありませんが、JavaScript に基づいて、JS は URL 内の悪意のあるパラメータを解析して JS コードを実行します

2. XSS分類の詳細説明
(1) 保存型XSS
保存型XSS:個人情報へのコード挿入や記事の公開など、Webサーバーにコードが保存される永続化で、フィルタリングが無い場合やフィルタリングが厳しくない場合これらのコードはサーバーに保存され、ユーザーがページにアクセスするとコードの実行がトリガーされます。この種の XSS はより危険であり、ワームを引き起こしたり Cookie を盗んだりするのが簡単です。特定のページにアクセスするすべてのユーザーが攻撃されます。

特徴:
XSS 攻撃コードは Web サーバーに保存されます。
攻撃者は通常、Web サイト (Web サーバーにコンテンツを入力できるすべての場所) 上のメッセージ、コメント、ブログ、ログなどの機能を通じて攻撃コードを Web サーバーに保存します
。 XSS 攻撃プロセス:


DVWA 射撃場の構築チュートリアル
http://www.cnblogs.com/heiwa-0924/p/12443427.html

保存された XSS-DVWA
https://blog.csdn.net/weixin_40950781/article/details/100007103

ペイロード:

低:
高:<img src=1 οnerrοr=alert(1)>

(2) リフレクティブ XSS
リフレクティブ クロスサイト スクリプティングは、非永続的なパラメトリック クロスサイト スクリプティングとも呼ばれ、最も一般的で広く使用されており、主に URL アドレスのパラメータに悪意のあるスクリプトを添付するために使用されます。

例:
  http://www.test.com/search.php?key="><script>alert("xss")</script>
1
は通常、構築された URL を被害者に送信するために使用されます。クリック時にトリガーされ、1 回のみ実行され、非永続的です。

反映された XSS 攻撃プロセス:


反映された XSS-DVWA:
  ペイロード:
  低:<script>alert(1)</script>
  中:<SCRIPT>alert(1)</SCRIPT>
  高:<img src=1 onerrοr=alert(1)>
1
2
3
4
(3) JS の概要
リテラル スクリプト言語である JavaScript は、型のサポートが組み込まれており、動的に型付けされ、弱い型付けが行われるプロトタイプ ベースの言語です。そのインタプリタは JavaScript エンジンと呼ばれ、ブラウザの一部であり、クライアント側のスクリプト言語として広く使用されています。HTML Web ページに動的な機能を追加するために、HTML (標準の一般マークアップ言語に基づくアプリケーション) Web ページで最初に使用されました。 . .
1995 年に、Netscape の Brendan Aich が初めて Netscape Navigator ブラウザを設計し、実装しました。Netscape は Sun と協力していたので、Netscape の経営陣はそれを Java のように見せたいと考え、JavaScript と名付けました。しかし実際には、その文法スタイルは Self と Scheme に近いです。
技術的な利点を得るために、Microsoft は JScript を立ち上げ、CEnvi は JavaScript などのブラウザ上でも実行できる ScriptEase を立ち上げました。仕様を統一するため、JavaScript は ECMA 標準と互換性があるため、ECMAScript とも呼ばれます。
学習JS: https://www.w3school.com.cn/js/index.asp
3. XSSの発見と保護
(1) XSSの5つの防御方法
HTMLノードコンテンツのXSS防御
<< と >> をエスケープすることは、<> をエスケープすることを意味します。エスケープする方法は 2 つあり、1 つはデータベースへの書き込み時にエスケープする方法、もう 1 つは解析時にエスケープする方法です。

ここは表示時にエスケープされます

varscapeHtml = function(str){     str = str.replace(/>/g,'<');     str = str.replace(/>/g,'>');     return str; } scapeHtml(content) ; 1 2 3 4 5 6 XSS 防御HTML 属性のエスケープ " &quto; は二重引用符をエスケープし、 ' は一重引用符をエスケープします (もう 1 つ注意すべき点は、実際には HTML 属性には引用符を含めることができないため、厳密にはスペースもエスケープする必要がありますが、これによりレンダリング時に間違った数のスペースが発生するため、スペースをエスケープせず、すべての HTML 属性を引用符で囲みます)。これにより、属性が事前に閉じられないようになります。












varscapeHtmlProperty = function(str){     str = str.replace(/"/g,''');     str = str.replace(/'/g,''');     str = str.replace( / /g,' ');     return str; }




scapeHtmlProperty(content);
1
2
3
4
5
6
7
8
実際、上記の 2 つの関数を 1 つの関数に結合できるため、コンテンツとプロパティの両方を 1 つの関数でフィルターできます。

HTML エスケープ関数
varscapeHtmlProperty = function(str){     if(!str) return '';     str = str.replace(/&/g,'&');     str = str.replace(/>/g,' < ;');     str = str.replace(/>/g,'>');     str = str.replace(/"/g,'&quto;');     str = str.replace(/'/g, ' '');     return str; }エスケープHtml(content); 1 2 3 4 5 6 7 8 9 10 jsエスケープ "\"をエスケープするか、jsonに置き換えます




















varscapeForJs = function(str){     if(!str) return '';     str = str.replace(/\\/g,'\\\\');     str = str.replace(/"/g,'\ \"'); } 1 2 3 4 5リッチ テキストは完全な HTML が必要なため、フィルタリングが簡単ではありません。一般に、一部のタグと属性はフィルタリング用のホワイト リストに従って予約されています。許可されたタグと属性を除き、他のすべては可(ブラックリスト方式もあるが、html複合効果が相対的に低いため、原則として従来の定期置換)










実際、他の人が作成できる XSS コンポーネントは、直接 xss と呼ばれます。

npm install xss
1
ホワイトリスト - サードパーティ ライブラリ XSS を使用し、指定されたホワイトリストをサポートします

var xssF​​ilter = function(html){     if(!html) return '';     var xss = require('xss');     var ret = xss(html,{         whileList:{             img:['src'],             a:['href'],             font:['size','color']         },         onIgnoreTag: function(){             return '';         }     });     console.log(html,ret);     retを返します。}












    

    

1
2
3
4 5
6
7
8
9
10
11
12
13
14
15
16
17
18 (2) XSS ワームの攻撃XSS ワームの破壊力と影響力は巨大です
XSS ワームは主にユーザー間のやり取りが行われるページで発生し、Web アプリケーションがユーザーが入力したデータ情報を厳密にフィルタリングしていない場合、Ajax の非同期送信と組み合わせることで、悪意のあるコードを埋め込みながら実装される可能性があります。外部からコードの感染と伝播を実現し、XSS ワームを形成します。

(3) XSS 脆弱性の掘削
自動検出用スキャンツール
AWVS
AppScan
JSKy
手動テスト
ソースコード分析
(4) XSS 脆弱性の防止
XSS クロスサイトスクリプティング攻撃の脆弱性防止

クライアントユーザー
IE8 およびアドバンストバージョンでは、XSS フィルタ機能が有効になり、
Firefox では CSP、Noscript などの拡張機能が使用されます。
Rising Personal Firewall 2012 バージョンでは、XSS インターセプト機能が有効になります

Web アプリケーション プログラマーは
HttpOnly の
完全な入出力検査を使用します

HttpOnly
HttpOnly はもともと Microsoft によって提案され、多くの人気のあるブラウザ ベンダーによって採用されています。HttpOnly の役割は XSS クロスサイト スクリプティング攻撃をフィルタリングすることではありませんが、ブラウザは、XSS クロスサイト スクリプティング攻撃後の Cookie セッション ハイジャック動作を解決するために、ページ上の Javascript が HttpOnly 属性を持つ Cookie にアクセスすることを禁止します。

入出力チェック
3 種類の XSS クロスサイト スクリプティング攻撃の脆弱性の原因が異なるため、入出力チェックの一部はリフレクティブ XSS とストアド XSS に適用され、その他は DOM ベース XSS に適用されます。ほとんどの場合
、これは信頼できる文字または入力データ形式のチェックです。たとえば、ユーザーが入力する登録アカウント情報には、文字、数字、アンダースコア、および漢字のみが許可されます。白文字以外のすべての文字リストは不正な入力とみなされます。IPアドレス、電話番号、メールアドレス、日付などのデータ形式には一定のフォーマット仕様があり、データ仕様に準拠した入力情報のみが検査に合格します。
出力検査は主にデータ表示処理であり、データ情報はHTMLエンコードで処理され、XSSクロスサイトスクリプティング攻撃を引き起こす可能性のある悪意のある文字はエンコードされ、通常のデータ表示に影響を与えることなく悪意のある文字をフィルタリングできます。 。
XSS クロスサイト スクリプティング攻撃を引き起こす可能性のある一般的な文字とその HTML コード:

  " --- "
  ' --- '
  & --- &
  < --- &It;
  > --- >

一般的に使用されるエンコーディングに加えて、次のような ASCII コードを使用して任意の文字を HTML エンコードできます。

  % --- %
  * --- *
1
2
3
4
5
6
7
8
9
10
DOM ベースの XSS 入出力検査
- 特異性
  - DOM ベースの XSS クロスサイト スクリプティング攻撃が発生した場合、悪意のあるデータ従来の XSS クロスサイト スクリプティング攻撃のデータ形式とは異なり、サーバーによる処理や応答を行わずにクライアントを直接攻撃することも可能です。
- 入力検査
  - 対応するセキュリティ検出コードをクライアント側に導入した場合のフィルタリング効果は、サーバー側よりも明らかです。
  - ユーザーが入力したデータに文字、数字、スペースのみが含まれていることを確認するクライアント側の検出コード。
  - サーバーは上記のデータ検査機能を実装します
    - URL パラメーターの名前と番号の検査
    - パラメーター値のタイプと内容の検査
- 出力検査
  - ユーザーが制御可能な DOM データ コンテンツをドキュメントに挿入する前に、Web アプリケーションには送信されたデータを含める必要があります すべて存在する可能性のある危険な文字や表現はフィルタリングされ、安全な方法で挿入されます
—————————————————
著作権表示: この記事は CSDN ブロガー「Security Old A」のオリジナル作品です。 「この記事は CC 4.0 BY-SA 著作権契約に従っています。転載する場合は、元のソース リンクとこの声明を添付してください。
元のリンク: https://blog.csdn.net/qq_44857938/article/details/118034947

おすすめ

転載: blog.csdn.net/liuqinhou/article/details/131065164