gpt4 book ai didi

c# - ASP.NET MVC 是不是 Url.IsLocalUrl() 的功能不正确?

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:16 35 4
gpt4 key购买 nike

我最近偷看了 Url.IsLocalUrl() 方法的实现,该方法被广泛使用并被推荐为用于防止重定向攻击的措施之一。我惊讶地发现,如果我要为我的应用程序中的 Controller 的其中一个操作提供完整的 URL,此方法会返回 false。

例如,如果我的应用程序托管在 http://localhost:422如果我要指定一个有效的 Controller 和操作名称,例如 http://localhost:422/home/index ,我会得到假。看了它的实现后,我明白了为什么。但是一开始的实现不是不正确的吗?

我应该实现自己的 IsLocalUrl() 吗?还是我应该继续使用当前的?

最佳答案

如果您查看文章Preventing Open Redirection Attacks ,您将看到 Url.IsLocalUrl() 和 ReturnUrl= 的预期用途是重定向到同一站点上的内部页面/资源,通常是在登录后。

示例表明它希望您使用相对或部分 url 进行内部重定向,而不是完全限定的 url。

最好的做法是像这样编写代码:

//  http://localhost:422/?ReturnUrl=/home/index
// returnUrl == "/home/index"
if( Url.IsLocalUrl(returnUrl) )
{

... 而不是这个:

//  http://localhost:422/?ReturnUrl=http%3A%2F%2Flocalhost%3A422%2Fhome%2Findex
// returnUrl == "http://localhost:422/home/index"
if( Url.IsLocalUrl(returnUrl) )
{

如果您只在同一个站点上使用重定向(为了安全起见,大多数非 bit.ly 类型站点的应用程序都建议这样做),那么您应该能够做到这一点。

使用现有的 Url.IsLocalUrl() ,但传递部分 url 重定向。

关于c# - ASP.NET MVC 是不是 Url.IsLocalUrl() 的功能不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31307511/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com