頁框式ASP.NET的Login相關修正
出自ProgWiki
目錄 |
用途
- 修正Login後,顯示出正確Return的頁面。
相關修正檔案
Login.aspx
- 使Login.aspx頁面,跳出index.aspx的頁框用。
<head runat="server"> <title>登入用頁面</title> <script type="text/javascript"> //<![CDATA[ if (top.location != location) top.location.href = location.href; //]]> </script> </head>
Login.aspx.cs
public partial class Login : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string strReturnUrl = this.Request.QueryString["ReturnUrl"]; if (strReturnUrl != null) { this.Session["ReturnUrl"] = strReturnUrl; this.Response.Redirect("Login.aspx"); return; } // 其他略 } //end of Page_Load() }
index.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>首頁</title> <% string strUrl = this.Session["ReturnUrl"] as string; if (string.IsNullOrEmpty(strUrl)) this.Session["ReturnUrl"] = "copy_right.aspx"; %> </head> <frameset cols = "156,*" framespacing="1" border="1" frameborder="0"> <frame src ="menu.aspx" /> <frame src ='<%=this.Session["ReturnUrl"].ToString()%>' name="MainFrame" /> </frameset> </html>
OtherPage.aspx.cs
- 其他經由Menu.aspx點進去的頁面的修正範例。
public partial class OtherPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //檢查是否經過登入成功 if (!User.Identity.IsAuthenticated) { this.Session["ReturnUrl"] = this.Request.RawUrl; FormsAuthentication.RedirectToLoginPage(); return; } // 其他略 } //end of Page_Load() }
注意事項
- 為了避免惡意的使用者使用XSS攻擊,請勿在 aspx 的page標籤內使用
ValidateRequest="false"
- 以便能讓IIS針對頁面的GET模式傳入值,進行XSS的安全性篩選。
- 如有類似下列的傳入參數將使IIS彈出錯誤而終止該User遊覽的網頁,以策安全。
http://www.example.com/Login.aspx?ReturnUrl=<script>alert('XSS')</script>
- 網站的web.config 未開啟Debug模式,網站回應的訊息如下:
執行階段錯誤 描述: 伺服器上發生應用程式錯誤。此應用程式的目前自訂錯誤設定因安全性考量,防止他人從遠端看見應用程式錯誤的詳細資訊。然而,可以使用本機伺服器電腦上的瀏覽器檢視。
- 網站的web.config 已開啟Debug模式網站回應的訊息如下:
應用程式中發生伺服器錯誤。
具有潛在危險 Request.QueryString 的值已從用戶端 (ReturnUrl="<script>alert('XSS')...") 偵測到。
描述: 要求驗證偵測到具有潛在危險的用戶端輸入值,對這個要求的處理已經中止。這個值可能表示有人嘗試危害應用程式的安全性,例如跨站台的指令碼處理攻擊。您可以在 Page 指示詞或 組態區段中設定 validateRequest=false 來停用要求驗證。但是我們強烈建議您的應用程式應該明確地檢查所有這類的輸入。
例外詳細資訊: System.Web.HttpRequestValidationException: 具有潛在危險 Request.QueryString 的值已從用戶端 (ReturnUrl="<script>alert('XSS')...") 偵測到。
- 如網站使用該XSS攻擊的URL,卻未出現上述任一的錯誤訊息畫面者。請檢查你的aspx頁面中是否有使用到ValidateRequest="false",並修正它,以防萬一。