【问题标题】:Is Response.Redirect(Request.Url.AbsolutePath) Always "Safe"?Response.Redirect(Request.Url.AbsolutePath) 总是“安全”吗?
【发布时间】:2011-10-15 13:49:17
【问题描述】:

我需要在减去任何查询参数的情况下重定向回当前页面。

我刚刚找到Request.Url.AbsolutePath,看起来它只是提供了传递给Response.Redirect() 的票。

它似乎在我的开发机器上工作正常。有谁知道重定向到该属性值的任何潜在问题?很难确认它在所有情况下都是“安全的”。

【问题讨论】:

    标签: asp.net url


    【解决方案1】:

    如果您在内部“重写”了 URL,则可能会出现问题。例如,用户请求“/team.aspx”,但在内部您转移执行或将 url 重写为“/page.aspx?id=137”。

    就个人而言,我更喜欢使用 Request.RawUrl(它始终是本地的),您可以剥离查询字符串。

    摆脱请求的主机部分不是问题,因为 HTTP 重定向可以是绝对路径(“/foo/bar”)上的路径,并且浏览器将保留协议、端口和主机名。

    【讨论】:

    • 我读了你的第一段好几遍,但还是不太明白。如果用户请求/team.aspx,那么我希望Request.Url.AbsolutePath 返回/team.aspx/page.aspx?id=137 来自哪里?
    • @Marcelo - 但他没有重写网址。
    • Jonathan,如果您使用任何形式的 URL,请重新编写 AbsolutePath 上的 URL 与 RawUrl 上的 URL 不同。 RawUrl 是通过 HTTP 请求发送的内容,也是用户在浏览器上看到的内容。
    【解决方案2】:

    我会使用 Request.Url.OriginalString。

    绝对路径去掉了 URL 的主机部分。

    看看这个:http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

    【讨论】:

    • OriginalString 包含查询字符串。我知道我可以去掉它,但是重定向到Request.Url.AbsolutePath 有什么问题?只要我重定向到同一个域,我就不确定我是否理解问题。
    • @JOnathan Wood - 误读了您的帖子,您是对的,您尝试做的事情没有问题。如果您不想要实际的查询参数,请使用Request.Url.AbsolutePath
    猜你喜欢
    • 2011-06-17
    • 2011-06-06
    • 2020-04-06
    • 2018-02-03
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 2012-03-07
    • 2020-03-07
    相关资源
    最近更新 更多