2008-09-18 65 views
5

我試圖將自制登錄系統轉換爲包含在.net中的標準asp.net登錄控件。我希望網站上的所有通信都能讓未登錄的用戶使用明文形式,但在用戶登錄後將所有內容都鎖定在SSL中 - 包括傳輸用戶名和密碼。使用asp.net登錄控件的部分站點SSL

我之前通過加載第二頁 - 「loginaction.aspx」 - 帶有https:前綴,然後通過在Request.Form.Keys中查找正確的文本框控件來提取用戶名和密碼。有沒有辦法使用.net登錄控件做類似的事情?我不想有一個單獨的登錄頁面,而是在網站的每個頁面上包含此控件(在登錄視圖中)。

回答

2

因爲回發(這是登錄控件使用的內容)將會是頁面的安全性(SSL或非SSL),所以您無法簡單地進行操作。 。

在這種情況下最好的辦法是使用包含HTTPS(SSL)頁面的IFRAME,該頁面只包含登錄控件。您可能必須在登錄後重定向到另一個頁面,以便跳出IFRAME。

計劃B將在頁面上(主要表單外部)擁有一個單獨的表單,該表單的ACTION屬性指向您處理登錄的另一個頁面。您將不得不滾動您自己的登錄代碼來處理表單身份驗證。

+0

注意,使用這兩種技術仍不安全,因爲它容易受中間人攻擊。欲瞭解更多信息,請閱讀。 http://jlorenzen.blogspot.com/2009/11/preventing-insecure-login-pages.html – 2012-09-16 18:24:02

0

您無法將網站設置爲非SSL,並在每個網頁上都有登錄框,然後通過SSL提交用戶名和密碼。

真正做到這一點的唯一方法是使用某種類型的框架。這樣你的整個頁面可以是非SSL的,但登錄框架必須是SSL。

這樣做的常用方法是使用SSL鎖定整個站點,不必擔心用戶名和密碼SSL加密並在登錄後轉到SSL,或者轉到上面提到的幀路由。

1

我能夠通過將OnClientClick事件添加到登錄按鈕控件並將其設置爲以下JavaScript函數來實現此目的。
`

function forceSSLSubmit() 
{ 

       var strAction = document.forms[0].action.toString(); 

       if (strAction.toLowerCase().indexOf("http:") == 0) { 
        strAction = "https" + strAction.substring(4); 

        document.forms[0].action = strAction; 
       } 

     } 

`