2009-03-06 21 views
7

C#3.0 ASP.Net 2.0 IIS6ASP.Net(C#の)HTTPページからHTTPSへ投稿する方法

私は、通常の[非HTTPS]ページがあります。このページには、標準のASP.Netフォームが1つあります。

ページには機能の2つの「領域」がありますが、ログインと「見積もり」ログインページはHTTPSにPOSTする必要がありますが、残りのページ([other area]を含む)はHTTPSにできません。 Java [JSP]と通常のHTMLでは、2つの形式しかありません。 HTTPSに投稿するものとそうでないもの。

これをASP.Net [1ページから]で処理する方法は何ですか。私はHTTPS login.aspxページにリンクできることを知っていますが、ビジネスは実際にコンテキストを一緒にしたいと思います。

アイデア?

おかげで、

答えて

0

あなたがいない、両方同時に、一つまたはその他をやっている私は、あなたのコンテキストからと仮定しています。

ボタンオブジェクトのPostbackURLを見てください。
ログインボタンは「https://secure.login.com

にポストバックできます。他のボタンはページ自体にポストバックすることができます。

ここで問題になるのは、ログインフィールドを安全でないページにポストバックすることです。つまり、暗号化されていないため、スニッフィングできます。

「見積もりを取得する」ボタンが押された場合、投稿する前にログインフィールドをクリアすることが迅速かつ汚れた回避策になります。

2

aspxページには2つのフォームがあります。あなたはそれらを入れ子にすることはできません。

私が作成したページには、ページに返信するフォームと、Google Checkoutに返信するフォームがあります。

ページのコンテンツを混在させる必要がある場合は、ページの下部に(メインフォームタグの後ろに)httpsフォームを置き、隠しフィールドを入力します。ユーザーがボタンをクリックすると、Javascriptを使用して非表示フィールドに値を割り当て、httpsフォームを送信します。

-1

Response.Redirect( "https://.../Login.aspx")を実行できませんでした。ログインボタンのクリックイベント。

+0

ジョナサン:ログインボタンイベントにResponse.Redirectがある場合は、まだポストバックしていませんか?例えば。ユーザー名とパスワードはクリアテキストで送信されましたか? –

0

HTTPとHTTPSの両方のページが同じサーバーにあるか、同じアプリケーションの一部ですか?

もしそうなら、Server.Transfer()メソッドを使用してフォームをそのまま維持し、HTTPSを持つことができます。

0

ASP.Net 3.5(おそらくSP1 - これが基本ライブラリまたはSPに含まれていたかどうかを忘れる)では、 "action"属性を設定できるようになりました。しかし、それは両方のフォームのHTTPSへの投稿になります。

両方のフォームを同じページに配置し、「実行時」に送信するフォームを決定する場合は、クライアント側のコードで行う必要があります。ポストバックをトリガーするか、または_dopostback(またはそれが呼び出されているかどうかに関わらず、それを調べるために怠惰になる)関数にクライアントハンドラを置いて、どのボタンが押されたかを確認させます。非セキュアページの場合は、最初にログインフィールドのデータをすべて消去します。その後、手動で正しいページにポストバックをトリガーします。

2

ログインイベントのHttpWebRequestオブジェクトを使用してコードを手動で投稿し、返された応答をユーザーのストリームに書き戻すことができます。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL); 
request.UserAgent = UserAgent; 
request.ContentType = ContentType; 
request.Method = "POST"; 

// Write your bytes of the login section here 
Stream oStream = request.GetRequestStream(); 
oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length); 
oStream.Close(); 

// Send the request and get a response 
HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); 

// Read the response 
StreamReader sr = new StreamReader(resp.GetResponseStream()); 

// return the response to the screen 
string returnedValue = sr.ReadToEnd(); 

    sr.Close(); 
    resp.Close(); 

    Response.Write(returnedValue); 
3

ソリューションは、「クロスページポストバック」、つまり、あなたのユーザー任意のボタンコントロール(LinkBut​​tonコントロール、ボタン、のImageButtonなど)のPostBackUrlプロパティを指定するためにasp.netを使用することです。このプロパティを使用すると、好きなページにポストバックすることができます。あなたのPostBackUrlをあなたのページのhttpsバージョンに設定すればいいです。あなたのページにhttpを強制するurlリダイレクトがないことを確認してください。あなたがPostBackUrlを指定しない場合は、httpsのバージョンに戻って投稿するあなたのいずれかのボタンを設定し、HTTPのバージョン(と他の必要があり、あなたの特定のケースで

// ensure we send credentials over a secure connection 
if (!HttpContext.Current.Request.IsSecureConnection) 
{ 
    string postbackUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace("http", "https"); 
    LinkButton_Login.PostBackUrl = postbackUrl; 
} 

デフォルトではバックに投稿することですそのままのページ自体)。

+0

このページの回答を考えれば、Webがそのような安全でない場所であることは不思議ではありません。私はコーヒーショップで遊びに行き、より多くのパケットをスニッフィングする必要があります!ちなみに良い答えです。実際にセキュリティを維持している唯一のものです(ちょっとハッキリではありませんが!) –

関連する問題