2008-10-16 3 views
22

HTML 페이지에서 ASPX 페이지 (2.0)로 양식을 게시하고 값을 읽을 수 있습니까?양식을 HTML에서 ASPX 페이지로 게시하는 방법

현재 회원 공급자를 사용하는 ASP.NET 사이트가 있으며 모든 것이 잘 작동합니다. 사용자는 Login.aspx 페이지에서 로그인 할 수 있습니다.

이제는 사용자가 다른 웹 사이트에서 직접 로그인 할 수 있기를 원합니다. 기본적으로 정적 HTML 페이지입니다. 사용자는이 HTML 페이지에 이름과 비밀번호를 입력하고 Login.aspx 페이지에 POST 할 수 있어야합니다 (수동으로 로그인 할 수있는 곳).

HTML에서 ASPX로 양식 값을 전달할 수 있습니까? 모든 것을 시도했으며 Request.Form.Keys 컬렉션은 항상 비어 있습니다. 나는 HTTP GET을 사용할 수 없다. 왜냐하면 이것들은 자격증 명이고 쿼리 문자열에 전달 될 수 없기 때문이다.

내가 아는 유일한 방법은 iframe입니다.

+1

이 제프는 CSRF와 XSRF 공격에 그의 기사에 대한 경고 물건의 종류 아닌가? [http://www.codinghorror.com/blog/archives/001175.html] (http://www.codinghorror.com/blog/archives/001175.html) –

+0

나는 아무도 이것을 언급하지 않았다는 것에 놀랐습니다. HTTP POST는 GET보다 안전하지 않습니다. 이런 식으로 자격 증명을 전달하는 것에 대해 권하고 싶습니다. 많은 아이디어와 정보가 여기에 있습니다 : http://stackoverflow.com/questions/1008668/how-secure-is-a-http-post –

답변

2

HTML 양식이 정확한지, 실제로 HTTP POST를 수행합니까? Fiddler2을 실행 한 다음 Login.aspx를 통해 로그인 한 다음 원격 HTML 사이트를 통해 로그인 한 다음 서버로 전송 된 요청을 비교하는 것이 좋습니다. 저에게 ASP.Net은 항상 정상적으로 작동합니다 - HTTP 요청에 유효한 POST가 포함되어 있으면 Request.Form을 사용하여 값을 얻을 수 있습니다.

27

이것은 매우입니다.

에서 .aspx 페이지 :

<form id="form1" runat="server"> 
    <div> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:TextBox TextMode="password" ID="TextBox2" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" Text="Button" /> 
    </div> 
</form> 

코드 숨김

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    For Each s As String In Request.Form.AllKeys 
     Response.Write(s & ": " & Request.Form(s) & "<br />") 
    Next 
End Sub 

별도의 HTML 페이지 :

<form action="http://localhost/MyTestApp/Default.aspx" method="post"> 
    <input name="TextBox1" type="text" value="" id="TextBox1" /> 
    <input name="TextBox2" type="password" id="TextBox2" /> 
    <input type="submit" name="Button1" value="Button" id="Button1" /> 
</form> 

나는 당신이 개념의 증거를 제공해야한다 3 페이지를 조롱 ... 그리고 예상대로 양식 값을 역전시킵니다. 이 방법이 효과가 없다면 다른 사람들이 제안한 것처럼 트래픽 분석 도구 (피들러, 에테르)를 사용하십시오. 예상치 못한 부분이있을 수 있기 때문입니다.

+4

이것은 ASP.NET 4에서 폼을 찾지 못했습니다. Viewstate와 관련이있을 수 있습니다. 나는 이것을 사용하지 않으려 고 노력했지만, 아직 행운이 없으면 로그인은 여전히 ​​발생하지 않는다. – iss42

1

가능합니다.

어떻게할지는 가장 쉬운 방법은 게시하려는 aspx 페이지를 탐색하는 것입니다. 그런 다음 해당 페이지의 소스를 HTML로 저장하십시오. 새 HTML 페이지에서 원래 복사 한 aspx 페이지를 다시 가리 키도록 양식의 동작을 변경하십시오.

양식 필드에 값 태그를 추가하고 원하는 데이터를 입력 한 다음 페이지를 열고 제출 버튼을 누릅니다.

1

가능합니다. login.aspx 페이지 (예 : 사용자 이름 등)의 필수 구성 요소를 포함하는 양식이있는 HTML 페이지를 작성하고 ID가 동일한 지 확인하십시오. 너에게 행동을 취할 수 있도록 게시물인지 확인하십시오.

Page_Load 함수의 login.aspx 페이지에서 Request.Form 개체의 양식을 읽고 적절한 기능을 호출하여 사용자를 로그인하도록 할 수도 있습니다. 양식에 액세스 할 수 있어야하며 원하는 양식으로 양식을 처리 할 수 ​​있습니다.

18

html 입력에 NAME이없는 경우 Request.Form.Keys 모음은 비어 있습니다. .NET을 잠시 동안 해본 후에 거기에 놓는 것을 잊어 버리는 것은 쉽습니다. 그냥 이름을 지으면 좋을거야.

+2

그 사실을 깨닫는 데 나이가 들었습니다. 닷넷에서 할 때, asp.net 엔진은 자동으로 이름 atttribute를 추가합니다. html 양식을 '손으로'작성하면 잊어 버리기가 매우 쉽습니다. 그러면 아무것도 게시되지 않고 이유가 궁금합니다. – Anthony

+1

그래, 나는 이드를 설정하고 있었지만 이름을 설정하는 것을 잊었다 : S –

1

HTML 양식에서 추가 viewstate 변수를 제공하고 서버 페이지에서 ViewState를 비활성화해야합니다. 그러나 양쪽면에서 약간의 제어가 필요합니다.

양식 HTML :

<html><body> <form id='postForm' action='WebForm.aspx' method='POST'> 
     <input type='text' name='postData' value='base-64-encoded-value' /> 
     <input type='hidden' name='__VIEWSTATE' value='' /> <!-- still need __VIEWSTATE, even empty one --> 
    </form> 

</body></html> 

참고 빈 __VIEWSTATE.

WebForm.aspx :

<%@ Page Language="C#" AutoEventWireup="true" 
CodeBehind="WebForm.aspx.cs" Inherits="WebForm" 
EnableEventValidation="False" EnableViewState="false" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="postForm" runat="server"> 
     <asp:TextBox ID="postData" runat="server"></asp:TextBox> 
    <div> 

    </div> 
    </form> 
</body> 
</html> 

EnableEventValidation="False", EnableViewState="false"는 빈 뷰 상태에 대한 유효성 검사 오류를 방지합니다. 코드 뒤/상속 값이 정확하지 않습니다.

WebForm.cs :이 도움이 될 것입니다

public partial class WebForm : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string value = Encoding.Unicode.GetString(Convert.FromBase64String(this.postData.Text)); 
    } 
} 
0

희망 - HTML에서이 태그를 넣어

하기 만 페이지 지시문을 쓰기 content..just 당신의 login.aspx 디자인을 제거

및 제출 버튼을 클릭 한 후 aspx 페이지에 값을 얻을 것입니다 like this- protected void Pa ge_Load (개체 보낸 사람, EventArgs입니다 전자) {

 if (!IsPostBack) 
     { 
      CompleteRegistration(); 
     } 
    } 

공공 무효 CompleteRegistration() {

 NameValueCollection nv = Request.Form; 
     if (nv.Count != 0) 
     { 
      string strname = nv["txtbox1"]; 
      string strPwd = nv["txtbox2"]; 
     } 
    } 
관련 문제