2 回答
TA贡献1880条经验 获得超4个赞
简短的回答,使用:
return LocalRedirect(ReturnUrl);
长答案(出于安全目的很重要):
看起来您正在从用户那里获取 url,如果是这种情况,我不建议使用 return Redirect(ReturnUrl);本身,因为这为开放重定向漏洞攻击打开了通道。基本上,某人可以在某处(例如在广告中)有一个锚元素,该元素使用名为 ReturnUrl 的查询字符串参数将用户引导到您的登录页面,该参数指向他们自己的恶意网站。另一种方法是 ReturnUrl 查询字符串会将用户从您的登录表单重定向到一个看起来与您的完全一样的恶意登录表单,然后他们向用户显示密码不正确,让他们认为他们可能错过了一个字母左右,所以用户尝试再次登录,但这一次他们实际上是在将他们的凭据提交给恶意登录表单,而不是你的。然后,黑客将他们的凭据提交到您的网站后将他们重定向到您的网站,这样他们就不会发现任何错误,在他们看来,他们输错了密码,但在第二次尝试时,他们成功登录。所以使用LocalRedirect()而不是Redirect()将首先检查返回 url 是否是您自己网站的 url,如果不是,则重定向失败并引发异常。避免异常但检查本地 url 的另一种方法是执行以下操作:
if (Url.IsLocalUrl(ReturnUrl)) {
return Redirect(ReturnUrl);
}
这将为您提供相同的结果而不会引发异常,因为您首先检查 url 是否属于您的 Web 应用程序,然后再继续进行重定向
- 2 回答
- 0 关注
- 120 浏览
添加回答
举报