我正在使用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值的其他建议?
好文章关于returnURL,但我正在寻找验证它的建议。 – Josh 2010-02-20 14:48:42
嗯。也许只是为允许的字符的白名单创建一个正则表达式表达式并通过它来运行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
我是希望看到任何人都可以使用URL清理工具,RegEx很可能是正确的做法。 – Josh 2010-02-23 21:17:23