2009-10-13 136 views
1

問題: 我想要創建一個自定義登錄控件,它安全地發佈到HTTPS,而不會影響頁面上的其他提交按鈕。安全自定義登錄控制ASP.NET

如果我一直在ASP.NET MVC或任何其他語言寫這個事情,我只是創建一個新的窗體標籤與表單action =「https:// ...」。現在我被困在ASP.NET web表單站點中。這意味着我只能在整個頁面中使用一個表單標籤,從而將我從這個簡單的解決方案中解脫出來。

我試過了什麼?

  1. 我在預渲染期間更改了整個頁面的頁面,以便將操作發佈到HTTPS連衣裙。但正如我之前所說,這將使網頁上的所有其他按鈕也通過SSL提交。我不想那樣。

  2. 我用JavaScript做了幾乎相同的事情。關於這一點的好處是我可以將action屬性的fiddeling綁定到特定的按鈕。缺點是如果用戶禁用JavaScript或不支持,用戶名和密碼將以明文形式提交。

  3. 一種複合方法。我可以使用AJAX加載包含使用JavaScript更改帖子的控件的頁面。這樣,如果用戶沒有JavaScript,控件甚至不會呈現,而是呈現一個按鈕,將用戶發送到登錄頁面。

最後一種選擇是我的情況下的最佳選擇,但它變得複雜而沒有進入細節。

所以我的問題是,是否有任何其他方式實現ASP.NET中的安全登錄控制,而不使用JavaScript?

我一直在尋找我的手指解決這個問題沒有找到任何東西,所以如果任何人可以破解這個堅果,榮譽!

+0

不知道這是否會起作用,但如何分離登錄控件並將其呈現在頁面上的iframe中呢?這會讓你有沒有惱人的ASP.NET第二種形式? – Lazarus 2009-10-13 11:46:26

+0

請查閱http://msdn.microsoft.com/en-us/magazine/cc163736.aspx上的「管理多個表單」 – 2009-10-13 11:51:59

+0

謝謝Viktor我會檢查它。但問題是我們正在使用母版頁。如果我願意使用多種形式的解決方案,我需要改變漏洞網站,這是不可行的。 我在考慮iframe,會嘗試一個。 我認爲這次設計師將不得不彎曲開發者的風格。 – Gargamel 2009-10-13 12:50:53

回答

3

難道你不能只用<form runat="server">部分之外的移動控件嗎?

<form method="post" action="https://www.example.com/securepage.aspx"> 
    <ui:securelogincontrol id="SecureLogin" runat="server" /> 
</form> 

<form runat="server"> 
    <!-- all the stuff that requires a webform --> 
</form> 
+0

你不能這樣做 - 失敗! – 2009-10-13 11:51:26

+0

@RobW:是的,你可以!我已經完成了數十億次。 – LukeH 2009-10-13 11:52:54

+0

在第一個表格中製作純HTML並將其作爲舊版ASP(無服務器控件)進行管理。 – 2009-10-13 11:54:16

1

我沒有遇到過其他解決方案 - 這是Web表單方法的一個主要問題,也是MVC的一大優點。 Web表單要求您有一個專用的登錄頁面,該頁面使用HTTPS。

您提出的第二種方法是最簡單的方法 - 只要您很樂意允許沒有JavaScript的用戶通過HTTP登錄即可。你可以在你的登錄頁面下面有一個鏈接,說明類似於被JavaScript隱藏的「安全登錄」,以便讓他們選擇。

+0

是的,這就是缺點,即那些沒有JS的人將無法獲得連接 – Gargamel 2009-10-13 12:32:01

2

通常的做法是擁有一個專門的登錄頁面,其上僅包含<asp:Login>控件以提交表單。你有不同的設置?

如果你有一個專門的登錄頁面,那麼你可以設置爲需要SSL在web.config中

<authentication mode="Forms"> 
    <forms loginUrl="~/login.aspx" slidingExpiration="false" timeout="500" requireSSL="true"/> 
</authentication> 

您也可以使用ASP.NET AJAX authentication services

+0

有趣的是,您是否具有ASP.NET AJAX身份驗證的經驗。服務?或者你知道它是否支持HTTPS,以及當用戶沒有啓用JS時它是如何處理回退場景的?我找不到任何有關這方面的信息。 – Gargamel 2009-10-13 13:02:45

0

大家只是想驗證客戶端的頁面用我最終使用的方法回覆你。

,我們不得不要求當這些:

  1. 登錄應保護,SSL
  2. 應該支持非JavaScript的senarios
  3. Login控件應該能夠在網站的任何位置流。
  4. 只有需要在HTTPS應該使用HTTPS(因此搬回和協議之間轉發)

因此,與事實是,我們已經有了一個網站,在web表單模型依賴一個單一形式的標籤頁,以及事實上,Contentplaceholder依賴帶有runat =「server」的表單標籤,而我們的網站完全由MasterPage和ContentPlaceholder構建,唯一支持這一點的就是使用I-Frame解決方案。

這對有關刷新頁面,JavaScript的(因爲幾乎evryone使用JavaScript無論如何),HTTP到HTTPS和https訪問http張貼一些其他方面的挑戰。

根據需要,我們不希望所有網頁發佈到https,只有那些通過網絡發送敏感信息的網頁。 要處理這個問題,我們添加了每頁屬性,說明它是否應該執行安全發佈。當檢查這個標誌時,我們會檢查用戶是否已經來自安全頁面。 通過這樣做,我們可以更改表單發佈操作以反映所需的安全設置。

爲了解決Javascript問題,調用和來自不同的協議(它被看作是一個XSS攻擊在不同的域中調用JavaScript),我們做了兩次回發到頁面,並在查詢字符串中添加了一些 參數。

嗯,希望這個提示可以幫助你。