2010-02-19 69 views
3

我正在使用ASP.NET成員身份和表單身份驗證,並且在重定向到returnURL之前我想驗證它。對於那些不熟悉工作流程的人員,基本上如果您請求的頁面需要您進行身份驗證,那麼您將被重定向到登錄頁面。在URL字符串中,您會看到一個名爲returnURL的參數,例如 http://example.com/login.aspx?ReturnUrl=%2fprotected%2fdefault.aspx在重定向之前檢查ReturnUrl是否有效

無論是使用此在重定向如Response.Redirect的(RETURNURL)或間接地通過FormsAuthentication.RedirectFromLoginPage方法,它通過不用驗證RETURNURL。 FormsAuthentication.RedirectFromLoginPage確實有一個安全檢查,它不會離開域,但仍然不會阻止某人放置足夠多的隨機字符來導致錯誤。

我試過使用System.IO.File.Exists(Server.MapPath(returnURL)),但給出足夠的非法字符會導致Server.MapPath出錯。

注意:URLEncoding不起作用,因爲我們沒有清除參數,而是主要URL。

驗證或清理returnURL值的其他建議?

回答

2

這篇文章解釋了RETURNURL http://blogs.msdn.com/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx

的解剖當你正確狀態,域名被選中,所以用加密你的身份驗證cookie,並確保沿着您使用https,我認爲你可以做的唯一的事情停止無效的ReturnURL就是忽略它,並將所有登錄重定向到主頁或頂級網站,然後讓用戶通過菜單返回。一個很好的例子就是當你登錄到hotmail。

+0

好文章關於returnURL,但我正在尋找驗證它的建議。 – Josh 2010-02-20 14:48:42

+0

嗯。也許只是爲允許的字符的白名單創建一個正則表達式表達式並通過它來運行returnURL值?這裏是一個類似的問題,以允許的HTML字符的帖子: http://stackoverflow.com/questions/307013/how-do-i-filter-all-html-tags-except-a-certain-whitelist – hearn 2010-02-22 17:50:31

+0

我是希望看到任何人都可以使用URL清理工具,RegEx很可能是正確的做法。 – Josh 2010-02-23 21:17:23

相關問題