Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 重定向前请检查ReturnUrl是否有效_Asp.net_Asp.net Membership - Fatal编程技术网

Asp.net 重定向前请检查ReturnUrl是否有效

Asp.net 重定向前请检查ReturnUrl是否有效,asp.net,asp.net-membership,Asp.net,Asp.net Membership,我正在使用ASP.NET成员资格和表单身份验证,在重定向到returnURL之前,我想验证它。对于那些不熟悉工作流的人,基本上如果您请求的页面要求您经过身份验证,您将被重定向到登录页面。在URL字符串中,您将看到一个名为returnURL的参数,例如。 无论您是在诸如Response.redirect(returnURL)之类的重定向中使用它,还是通过FormsAuthentication.RedirectFromLoginPage方法间接使用它,它都会在不验证returnURL的情况下通过。

我正在使用ASP.NET成员资格和表单身份验证,在重定向到returnURL之前,我想验证它。对于那些不熟悉工作流的人,基本上如果您请求的页面要求您经过身份验证,您将被重定向到登录页面。在URL字符串中,您将看到一个名为returnURL的参数,例如。

无论您是在诸如Response.redirect(returnURL)之类的重定向中使用它,还是通过FormsAuthentication.RedirectFromLoginPage方法间接使用它,它都会在不验证returnURL的情况下通过。FormsAuthentication.RedirectFromLoginPage确实进行了安全检查,确保它没有离开域,但这仍然不能阻止某人输入足够的随机字符以导致错误

我尝试使用
System.IO.File.Exists(Server.MapPath(returnURL))
,但由于提供了足够多的非法字符,这会导致Server.MapPath出错

注意:URL编码不起作用,因为我们不是在清理参数,而是在清理主URL


关于验证或清除returnURL值的任何其他建议?

这篇文章解释了returnURL的结构


正如您正确声明的那样,域已被检查,因此除了加密您的身份验证cookie,并确保您使用https之外,我认为要阻止无效的ReturnURL,您唯一能做的就是忽略它,并将所有登录重定向到您的主页或网站的顶层,然后让用户通过菜单返回。登录hotmail就是一个很好的例子。

关于returnURL的文章不错,但我正在寻找验证它的建议。嗯。也许只是为允许的字符的白名单创建一个正则表达式,并通过它运行returnURL值?下面是一篇关于允许的HTML字符的类似问题的帖子:我想看看是否有人能很好地使用URL清理器,RegEx可能是正确的方法。我不是RegEx大师,但这看起来可能是个诀窍: