【解決方法】IIS リダイレクト ローカル Web サイト

プログラミングQA


Login.aspx と Main.aspx の 2 つのページからなるサイトを作成しました。 ログイン ページで、ユーザーに関する情報を含む Cookie を作成し、Response でその Cookie をメイン ページに送信し、そこで受信します。受信されない場合は、ユーザーをログインにリダイレクトします。 Visual Studio から Web サイトを開くとすべてが機能しますが、Microsoft IIS でローカルホスト Web サイトとして使用しようとすると、ログインからページを変更できなくなります。 IIS から設定する必要があるオプションですか、それとも何かが足りないのでしょうか?

C#
HttpCookie cookie = new HttpCookie("autorization");
Response.Cookies["autorization"]["name"] = name;
Response.Cookies["autorization"]["password"] = pass.ToString();
Response.Redirect("Main.aspx");

~/Main.aspx、./Main.aspx、/Main.aspx、http://ip:port/Main.aspx のフルパスも使用してみました。 Main での Cookie 受信をオフにし、URL バーに手動で入力することで Main にアクセスできますが、ログインからのコードでは (Cookie がなくても) アクセスできません。

Visual Studio では動作するのに、IIS では動作しないのはなぜですか? IIS でも動作させるには何を変更すればよいでしょうか? ありがとう。

/*
これは、Web サーバーを介した SQL サーバーからの情報の取得に関連している可能性があると思います。 次の文字列を使用しています。

C#
Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=SSPI;

server:localhost、ip\SQLEXPRESS、統合セキュリティを false にして試行しました。 IIS は Visual Studio でのみ機能するため、情報が IIS を通過できるように SQL で何かを設定する必要があるかもしれません。 SQL をトレースすると、IIS で開始されたサイトが接続してデータベースから情報を取得していることがわかりましたが、情報が IIS を介して渡されていない可能性があります。
*/

/*
問題は SQL と ISS ApplicationPool の通信にありました。 アプリケーション プールの ID をローカル システムに変更し、SQL の[ログイン]で、サーバー ロールを介して特定のデータベースにアクセスするように (または、必要に応じてユーザー マッピングを介して特定のデータベース アクセスのみに) NT AUTHORITY\SYSTEM 権限を変更しました。 ここで、ID を ApplicationPoolIdentity に返し、ユーザー名とパスワードを含む接続文字列を使用しています。
*/

解決策 1

ユーザー名とパスワードを Cookie に保存することは、 非常に 悪いアイデア。

Cookie はサイトへのリクエストごとに送信されます。 ネットワーク上の誰もがリクエストを傍受し、ユーザーの資格情報を読み取ることができます。

Cookie を「HTTP 専用」としてマークしていないため、サイトの XSS 脆弱性を悪用した攻撃者は、JavaScript からユーザーの資格情報を読み取り、自分のサーバーに送信することができます。

車輪を再発明しようとしないでください。 組み込みのセキュリティ機能を使用してサイトを保護します。

メンバーシップの紹介 | MSDN[^]
ASP.NET メンバーシップとロール プロバイダー[^]
ASP.NET アイデンティティ | ASP.NET サイト[^]
安全な「remember me」機能を構築する方法 (および構築しない方法) | トロイ・ハント[^]

コメント

タイトルとURLをコピーしました