2009-03-06 3 views
7

C# 3.0 ASP.Net 2.0 IIS6ASP.Net하는 HTTP 페이지

에서 HTTPS에 게시하는 방법 (C#을) 나는 일반 [비 HTTPS] 페이지가 있습니다. 페이지에는 표준 ASP.Net 양식 하나가 있습니다.

페이지에는 기능 영역이 두 개 있습니다. 로그인하고 "견적을 받아". 로그인 페이지는 HTTPS로 POST해야하며 [나머지 영역] 양식을 포함하여 나머지 페이지는 HTTPS가 될 수 없습니다. Java [JSP]와 정규 HTML에서 우리는 두 가지 형식을 가지고 있습니다. 하나는 HTTPS에 게시하고 다른 하나는 게시하지 않습니다.

[한 페이지에서] ASP.Net에서 이것을 처리하는 방법은 무엇입니까? HTTPS login.aspx 페이지에 링크 할 수 있다는 것을 알고 있지만 비즈니스에서는 실제로 컨텍스트를 함께 사용하고자합니다.

아이디어가 있으십니까?

감사합니다,

답변

0

당신은 둘 다 동시에, 한 가지 또는 다른를하고 있다는 것을 나는, 당신의 상황에서 믿고있어.

단추 개체의 PostbackURL을 살펴보십시오.
로그인 버튼은 "https://secure.login.com"으로 다시 게시 할 수 있습니다.

다른 버튼은 페이지 자체로 다시 게시 할 수 있습니다.

여기서 문제는 보안되지 않은 페이지에 로그인 필드를 계속 게시한다는 것입니다. 즉, 암호화되지 않았으며 스니핑 될 수 있음을 의미합니다.

"견적 가져 오기"버튼을 누르면 게시 전에 로그인 필드를 지우는 것이 빠르고 간단합니다.

2

aspx 페이지에는 두 개의 양식이있을 수 있습니다. 당신은 단지 그것들을 중첩시킬 수 없습니다.

내가 만든 페이지에는 페이지에 다시 게시되는 양식과 Google Checkout에 다시 게시되는 양식이 있습니다.

페이지 내용을 혼합해야하는 경우 페이지 하단 (기본 양식 태그 뒤)에 https 양식을 넣고 숨겨진 필드로 채 웁니다. 사용자가 버튼을 클릭하면 Javascript를 사용하여 숨겨진 필드에 값을 할당 한 다음 https 양식을 게시합니다.

-1

Response.Redirect ("https://.../Login.aspx"); 로그인 버튼 클릭 이벤트.

+0

Jonathan : 로그인 버튼 이벤트에 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

이 솔루션은, (의 LinkButton, 단추하여 ImageButton 등) 어떤 버튼 컨트롤의 즉, 당신 사용자 PostBackUrl 속성에 "크로스 페이지 포스트 백"을 지정하는 asp.net을 사용하는 것입니다. 이 속성을 사용하면 원하는 페이지로 다시 게시 할 수 있습니다. PostBackUrl을 페이지의 https 버전으로 설정하기 만하면됩니다. 또한 페이지에 http를 강제 실행하는 URL 리디렉션이 없는지 확인하십시오. 특정 경우

// 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; 
} 

당신이 PostBackUrl을 기본을 지정하지 않는 경우는 (은 HTTP 버전으로 기타를 HTTPS 버전으로 다시 게시 할 당신의 버튼 중 하나를 설정해야하고는 다시 게시하는 것입니다 있는 그대로 페이지 자체).

+0

이 페이지의 답변을 볼 때 웹이 불안정한 곳인지는 의심의 여지가 없습니다. 나는 커피 숍에서 놀고 패킷을 더 자주 냄새 맡아야한다! 좋은 답변, 실제로 보안을 유지하는 유일한 사람 (거의 해킹하지 않는 한!) –

관련 문제