【问题标题】:Can a URL change on postback?回发时 URL 可以更改吗?
【发布时间】:2009-05-04 17:08:32
【问题描述】:

我只需要在 GET 上解析 URL Request.Querystrings,而不是在回发上,对吧?

if(!IsPostBack)
{
    Viewstate["magic_number"] = Parse(Request.Query);
}

不能期望用户修改请求中的 URL 以进行后续回发,或者他们可以吗?

提问的动机——我不控制执行回发的 javascript sn-p,所以它对我来说是一个黑匣子。

【问题讨论】:

    标签: asp.net postback


    【解决方案1】:

    网址不会更改。但请记住,每个回发都是您的页面类的一个新实例。因此,如果您没有将结果保存在第一个视图的某个位置,您需要准备好在下一个视图中再次执行此操作,依此类推。在这种情况下,您将其保存到 ViewState,所以应该没问题。

    但是,我怀疑您不会问这个问题,除非您观察到导致您怀疑的行为。因此,让我们考虑一下可能导致此问题的原因:

    • 可以在您保存结果的客户端修改 ViewState(虽然不是微不足道的,绝对不推荐)。
    • 您可以在初始页面查看之前伪造回发。
    • 您可以使用 javascript 来更改发布的网址。

    但是,对于所有这些事情,如果你写了任何东西来做这件事,你肯定会知道。

    【讨论】:

      【解决方案2】:

      您的假设是正确的,该 URL 预计不会在随后的回发中被修改,您只需要在 GET 上解析查询字符串,这会在页面第一次加载时发生。

      【讨论】:

        【解决方案3】:

        回发的 URL 通常不会更改。

        当然可以使用 FireBug 之类的工具在回发之前编辑表单标签中的 URL,但是您可能不想要用户注入的值,而是原始值。

        【讨论】:

          【解决方案4】:

          正如其他人指出的那样,该 URL 预计不会改变。当然,如果我们生活在一个完美的世界中,您将永远不会收到垃圾邮件,也不会有人试图对您的网站进行任何恶意操作。

          在现实世界中,您应该预料到恶意人员会尝试劫持您的网站,并且需要关注诸如 injection attacks 之类的事情

          您应该永远不要假设在回发中收到的数据是有效的。

          【讨论】:

            猜你喜欢
            • 2014-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-15
            相关资源
            最近更新 更多