2008-10-16 22 views
22

HTML bir FORM POST ve değerleri okumak için muktedir?Nasıl Nasıl bir HTML sayfasından bir form gönderebilir ve ASPX sayfası (2.0) do ASPX sayfasına

Şu anda Üyelik sağlayıcısı kullanarak bir ASP.NET sitem var ve her şey yolunda çalışıyor. Kullanıcılar Login.aspx sayfasından giriş yapabilirler. temelde statik bir HTML sayfası -

Biz artık kullanıcıların başka bir web sitesinden doğrudan giriş var edebilmek istiyorum. Kullanıcılar bu HTML sayfasındaki adlarını ve şifrelerini girebilmeli ve benim Login.aspx sayfamın POST'suna sahip olmalıdır (burada bunları manuel olarak kaydedebilirim).

Form değerlerini HTML'den ASPX'e geçirmek mümkün mü? Her şeyi denedim ve Request.Form.Keys koleksiyonu her zaman boş. Bu bir kimlik bilgisi olduğundan ve bir sorgu dizesinde geçirilemediğinden bir HTTP GET kullanamıyorum.

Bildiğim tek şey bir iframe.

+1

ben Jeff CSRF ve XSRF saldırıları üzerine yaptığı makalesinde hakkında uyardı şey türü değil midir? [http://www.codinghorror.com/blog/archives/001175.html](http://www.codinghorror.com/blog/archives/001175.html) –

+0

Kimsenin bundan bahsetmemesine şaşırdım, ama bir http POST, bir GET'den daha güvenli değildir. Bu şekilde kimlik bilgilerini geçmeye karşı tavsiye ederim. Bir sürü fikir ve bilgi: http://stackoverflow.com/questions/1008668/how-secure-is-a-http-post –

cevap

2

HTML formunuzun doğru olduğundan ve aslında bir HTTP POST yapıp yapmadığına emin misiniz? Fiddler2 çalıştırmayı öneririm ve sonra Login.aspx, sonra uzak HTML sitesiyle oturum açmaya ve sonra sunucuya gönderilen istekleri karşılaştırmaya çalışıyorum. Benim için ASP.Net her zaman iyi çalıştı - eğer HTTP isteği geçerli bir POST içeriyorsa, Request.Form ...

27

kullanarak değerlere ulaşabilirim. çok mümkün.

.aspx sayfası:

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

kod arkasında:

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 

Ayrı HTML sayfası:

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

Sana kavramının kanıtı vermelidir 3 sayfa kadar alay ... ve form değerlerini beklendiği gibi yeniden oluşturur. Bu işe yaramazsa, diğerlerinin önerdiği gibi, bir trafik analizi aracı kullanın (kemancı, eterik), çünkü muhtemelen bir şey beklediğiniz yerde olmayacaktır.

+4

Bu, ASP.NET 4'te formumda çalışmıyor, aramadan görünüyor Viewstate ile ilgili olabilir. Bunu devre dışı bırakmayı denedim ama henüz hiç şans olmadan, giriş hala gerçekleşmiyor. – iss42

1

Emin olabilirsiniz.

Bunu nasıl görmenin en kolay yolu onlara içerik yayınlamak istediğiniz aspx sayfaya göz etmektir. Ardından bu sayfanın kaynağını HTML olarak kaydedin. Başlangıçta kopyaladığınız aspx sayfasına geri dönmek için formun eylemini yeni html sayfanızda değiştirin. Formunuz alanlarına

Ekleme değer etiketleri ve orada istediğiniz verileri koymak, sonra sayfayı açın ve gönder düğmesine basın.

1

Emin olabilirsiniz. Formda, login.aspx sayfasından (örn. Kullanıcı adı, vb.) Gerekli bileşenleri içerecek bir HTML sayfası oluşturun ve aynı kimliğe sahip olduklarından emin olun. Harekete geçmek için bir gönderi olduğundan emin ol.

Form'u (Request.Form nesnesinde) okumak için Page_Load işlevinde login.aspx sayfasında bir kod yazmanız ve kullanıcıyı oturum açmak için uygun işlevleri çağırmanız gerekebilir, ancak bunun dışında, siz forma erişim sahibi olmalı ve onunla ne istediğini yapabilir. html girdilerin hiçbiri adları varsa

18

Request.Form.Keys koleksiyonu boş olacaktır. Bir süredir .NET yaptıktan sonra onları koymak unutmak kolaydır. Sadece isimlerini söyle ve gitmen için iyi olacaksın.

+2

Bunun farkına varmam yaşlandı. .Net'de yaptığınız zaman, asp.net motoru otomatik olarak atttribute adını ekler. Eğer html formunuzu 'elle' oluşturursanız, bunu unutmak çok kolay değildir ve sonra hiçbir şey gönderilmez ve nedenini merak ediyorsunuz. – Anthony

+1

Evet, Kimliği ayarlıyordum ama Adı: S ayarlamayı unutmuştum –

1

html biçiminde, ek viewtate değişkenini sağlamanız ve sunucu sayfasında ViewState özelliğini devre dışı bırakmanız gerekir. Bu, her iki tarafta da biraz kontrol gerektirir.

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

Not boş __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> 

Not EnableEventValidation="False", EnableViewState="false" boş görünüşüdür durum için doğrulama hatası önlemek için kullanılırlar. Kodu Behind/Inherits değerleri kesin değil.

WebForm.cs: Bu yardımcı olacaktır

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

Umut - html bu etiketi koyun ve

tek sayfa direktifi yazmak content..just sizin login.aspx tasarımını kaldırmak

ve değerleri gönderdikten sonra aspx sayfasında alacaksınız. bunu beğendi protected 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"]; 
     } 
    } 
İlgili konular