この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 5685|答える: 2

[出典] ASP.NET コア(20) オープンリダイレクト攻撃を防ぐ

[リンクをコピー]
掲載地 2023/06/06 21:55:38 | | | |
要件:最近、Microsoftの ASP.NET Core文書「Preventing Open Redirect Attacks in ASP.NET Core」を読みました。これは大まかに「Prevent Open Redirect Attacks in Core」という意味です開発者はコールバックアドレスにジャンプする際、フィッシング攻撃のために悪意のあるコールバックアドレスを偽造するのを防ぐためにローカルサイトの経路に注意を払うべきです。 コードを勉強し、ASP.NET MVCプロジェクトに移植する準備をしてください。

以前、大手メーカーがこの脆弱性を持っていて、QQやWeChatのトラフィックを流すために使われた人もいました。以下のように:



この脆弱性を悪用し、一部のチャットツールは大企業ドメインを信頼しているため、ユーザーが悪意のあるウェブサイトコンテンツにアクセスするリンクを遮断できませんでした。

オープンリダイレクト攻撃とは何ですか?

ウェブアプリケーションは、認証が必要なリソースにアクセスする際にログインページにリダイレクトすることが多いです。 リダイレクトには通常、returnUrlクエリ文字列パラメータが含まれており、ログイン成功後に元々リクエストされたURLに戻れるようにします。 ユーザーが認証した後、最初にリクエストしたURLにリダイレクトされます。

攻撃の例

悪意のあるユーザーは、悪意のあるユーザーに自分の認証情報や機密情報へのアクセスを与える攻撃を開発することがあります。 攻撃を開始するために、悪意のあるユーザーはユーザーを騙してサイトのランディングページへのリンクをクリックしさせ、そのURLにreturnUrlのクエリ文字列の値を追加します。 そのためにcontoso.com例えば、アプリはhttp://contoso.com/Account/LogOn?returnUrl=/Home/Aboutランディングページを含みます。 攻撃は以下の手順に従って進みます。

  • ユーザーは悪意のあるリンクをクリックしてhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(2つ目のURLはcontoso1.com「、 の代わりにcontoso.com”) 。
  • ユーザーは無事にログインします。
  • ユーザーはそのサイトにリダイレクトされますhttp://contoso1.com/Account/LogOn(本物とまったく同じ見た目の悪意のあるサイトです)。
  • ユーザーは再度ログインし(悪意のあるサイトへの認証情報を提供します)、実際のサイトに戻されます。
  • ユーザーは最初のログイン失敗と2回目の試みが成功したと思い込むかもしれません。ユーザーはまだ自分の認証情報が侵害されたことに気づいていない可能性が高いです




ランディングページに加えて、一部のサイトはリダイレクトページやエンドポイントを提供しています。 例えば、あなたのアプリにオープンリダイレクト、/Home/Redirectを含むページがあるとしましょう。 例えば、攻撃者はメールの中にポイントを作成することがあります[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginリンク。 一般ユーザーはURLがあなたのサイト名で始まるのを見るでしょう。 信頼から、彼らはリンクをクリックします。 オープンリダイレクトはユーザーをあなたのサイトと同じフィッシングサイトに誘導し、ユーザーは自分のサイトだと思い込んでログインすることがあります。

オープンリダイレクト攻撃の防止

ウェブアプリケーションを開発する際、ユーザーが提供するすべてのデータは信頼できないものとして扱われます。 もしアプリがURL内容に基づいてユーザーをリダイレクトできる場合は、そのリダイレクトはアプリ内でローカルでのみ行うか(または既知のURLにリダイレクトし、クエリ文字列に含まれているURLにはリダイレクトしない)、

ローカルリダイレクト

LocalRedirectベースクラスのコントローラーヘルパーメソッドの使用:

非ローカルURLが指定されている場合、LocalRedirectは例外を投げます。 それ以外はリダイレクト方式と同じ動作をします。 例外情報は以下の通りです:

InvalidOperationException: The supplied URL is not local. A URL with an absolute path is considered local if it does not have a host/authority part. URLs using virtual paths ('~/') are also local.
ソースコードは以下の通りです:



実行プロセス: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl、そして最終的にはIsLocalUrlが呼び出されて判定されます(UrlHelperFactoryはデフォルトでIUrlHelperFactoryインターフェースを実装しています。 )。

ソースコードアドレス:ハイパーリンクのログインが見えます。

IsLocalURL

リダイレクトする前にIsLocalUrlを使い、以下の方法でURLをテストしてください:

コードは以下の通りです:

テストコードは以下の通りです:



他のドメイン名サイトにジャンプできる場合は、IUrlHelperFactoryインターフェースを実装し、プログラム開始時にデフォルトの実装クラスを置き換えるIServiceCollectionを修正できます。

参考:ハイパーリンクのログインが見えます。

(終わり)





先の:DockerはWindowsシステム上にイメージを構築します
次に:[Turn] (MSSQL) SQL Serverデータベースのintおよびguidによるプライマリキー比較
 地主| 掲載地 2023/06/06 21:57:12 |
ASP.NET Core(19)はBackgroundServiceを使ってバックグラウンドタスクを実行します
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET コア(18) シンプルなOutputCache出力キャッシュをカスタマイズする
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core(17)はMiniProfileアプリケーションパフォーマンス分析を統合しています
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET コア(16) 動的登録サービスの注入に依存
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core(XV)はHttpClientを使ってHTTPリクエストを送信します
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core(14)はSkiaSharpの画像キャプチャに基づいています
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core(XIII)で、それがAjaxリクエストかどうかを判定します
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET コア(12)フロントエンドJS、CSSバンドル、圧縮
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core(XI)エンドポイントルートは、すべてのDIサービスを表示するためのミドルウェアを追加します
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(10)における構成優先度の詳細な説明。
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core (9)のミドルウェアミドルウェアの詳細な説明。
https://www.itsvse.com/thread-9647-1-1.html

Core(8)のSwagger UIのデフォルトパラメータの穴 ASP.NET。
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET コア(7) フレームワークソースコードの詳細な分析
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DIはオブジェクト注入の方法を手動で取得します
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET コア(5)はCAP分散トランザクションに基づいています
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) フィルター 統一モデルステートモデル検証
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET コア(iii) ActivatorUtilitiesを用いて動的にインスタンスを作成する
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET コア(2) コードによるアプリケーションの再起動
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core(1)はRedisキャッシュを使用しています
https://www.itsvse.com/thread-9393-1-1.html
 地主| 掲載地 2023/06/06 22:01:21 |
IsLocalUrlメソッドは.NETフレームワークに以下のように移植されています:

免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com