2008-10-16 14 views
22

Wie poste ich ein Formular von einer HTML-Seite zu und ASPX-Seite (2.0) und in der Lage, die Werte zu lesen?Wie ein Formular von HTML zu ASPX-Seite POST

Ich habe derzeit eine ASP.NET-Website mit dem Mitgliedschaftsanbieter und alles funktioniert gut. Benutzer können sich von der Login.aspx-Seite aus anmelden.

Wir möchten jetzt Benutzer direkt von einer anderen Website anmelden können - das ist im Grunde eine statische HTML-Seite. Die Benutzer müssen in der Lage sein, ihren Namen und ihr Passwort auf dieser HTML-Seite einzugeben und sie auf meiner Login.aspx-Seite POST zu lassen (wo ich sie dann manuell anmelden kann).

Ist es möglich, Formularwerte von HTML nach ASPX zu übergeben? Ich habe alles versucht und die Request.Form.Keys-Sammlung ist immer leer. Ich kann kein HTTP-GET verwenden, da dies Anmeldeinformationen sind und nicht an eine Abfragezeichenfolge übergeben werden können.

Der einzige Weg, den ich kenne, ist ein Iframe.

+1

Ist das nicht die Art der Sache Jeff über auf CSRF und XSRF Angriffe in seinem Artikel gewarnt? [http://www.codinghorror.com/blog/archives/001175.html](http://www.codinghorror.com/blog/archives/001175.html] –

+0

Ich bin überrascht, dass niemand anderes dies erwähnt hat, aber ein http POST ist nicht sicherer als ein GET. Ich würde empfehlen, die Anmeldeinformationen auf diese Weise zu übergeben. Viele Ideen und Informationen hier: http://StackOverflow.com/Questions/1008668/How-Secure-is-Ahttp-post –

Antwort

2

Sind Sie sicher, dass Ihr HTML-Formular korrekt ist und tatsächlich einen HTTP-POST ausführt? Ich würde vorschlagen, Fiddler2 auszuführen, und dann versuchen, über Ihre Login.aspx, dann die Remote-HTML-Site einzuloggen, und vergleichen Sie dann die Anforderungen, die an den Server gesendet werden. Für mich funktionierte ASP.Net immer gut - wenn HTTP-Anfrage einen gültigen POST enthält, kann ich mit Request.Form ...

27

erreichen Das ist sehr möglich. Ich verspottet 3 Seiten, die Ihnen einen Proof of Concept geben sollte:

ASPX-Seite:

<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> 

Code hinter:

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 

separate HTML-Seite:

<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> 

... und es regurgitates die Form-Werte wie erwartet. Wenn dies nicht funktioniert, wie andere vorgeschlagen haben, verwenden Sie ein Verkehrsanalyse-Tool (Fiddler, ätherisch), weil etwas wahrscheinlich nicht da ist, wo Sie es erwarten.

+4

Dies funktioniert nicht von mir in ASP.NET 4, aus der Suche scheint dies könnte mit dem Viewstate zusammenhängen. Ich habe versucht, dies zu deaktivieren, aber ohne Glück ist der Login noch nicht erfolgt. – iss42

1

Sie können sicher.

Der einfachste Weg, um zu sehen, wie Sie dies tun können, ist zu der Aspx-Seite zu navigieren, die Sie veröffentlichen möchten. Speichern Sie dann die Quelle dieser Seite als HTML. Ändern Sie die Aktion des Formulars auf Ihrer neuen HTML-Seite, um auf die aspx-Seite zu verweisen, von der Sie sie ursprünglich kopiert haben.

Fügen Sie Ihren Formularfeldern Wert-Tags hinzu und fügen Sie die gewünschten Daten ein. Öffnen Sie dann die Seite und klicken Sie auf Senden.

1

Sie können sicher. Erstellen Sie eine HTML-Seite mit dem Formular, das die erforderlichen Komponenten von der login.aspx-Seite (d. H. Benutzername usw.) enthält, und stellen Sie sicher, dass sie die gleichen IDs haben. Stellen Sie für Ihre Aktion sicher, dass es sich um einen Beitrag handelt.

Möglicherweise müssen Sie auf der login.aspx-Seite in der Page_Load-Funktion Code eingeben, um das Formular (im Request.Form-Objekt) zu lesen und die entsprechenden Funktionen zum Anmelden des Benutzers aufzurufen, ansonsten jedoch sollte Zugriff auf das Formular haben und damit tun können, was Sie wollen.

18

Die Request.Form.Keys-Auflistung ist leer, wenn keine Ihrer HTML-Eingaben NAMEs enthält. Es ist leicht zu vergessen, sie dort zu platzieren, nachdem Sie eine Weile .NET ausgeführt haben. Nenne sie einfach und du wirst gut gehen.

+2

Es hat ewig gedauert, das zu erkennen. Wenn Sie dies in .Net tun, fügt die asp.net-Engine automatisch den Namen attribute hinzu. Wenn Sie Ihr HTML-Formular "von Hand" erstellen, ist es sehr einfach, es zu vergessen und dann wird nichts gepostet und Sie fragen sich warum. – Anthony

+1

Ja, ich habe die ID gesetzt, aber vergessen, den Namen: S –

1

Im HTML-Formular müssen Sie eine zusätzliche ViewState-Variable angeben und ViewState auf einer Server-Seite deaktivieren. Dies erfordert jedoch einige Kontrolle auf beiden Seiten.

Formular 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> 

Hinweis leer __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> 

Hinweis EnableEventValidation="False", EnableViewState="false" Validierungsfehler für leeren Ansichtszustand zu verhindern. Code Behind/Inherits Werte sind nicht präzise.

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

Hope this helfen - Diesen Tag in HTML und

Ihr login.aspx Design entfernen content..just nur Seitendirektive

schreiben

und Sie erhalten die Werte in aspx Seite nach Absenden Schaltfläche klicken wie this- geschützt void Pa ge_Load (object sender, EventArgs e) {

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

public void CompleteRegistration() {

 NameValueCollection nv = Request.Form; 
     if (nv.Count != 0) 
     { 
      string strname = nv["txtbox1"]; 
      string strPwd = nv["txtbox2"]; 
     } 
    } 
Verwandte Themen