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

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

不能期望用户修改请求中的 URL 以进行后续回发,是吗?

问题的动机——我不控制执行回发的 JavaScript 代码片段,所以它对我来说是黑盒。

有帮助吗?

解决方案

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

然而,我怀疑你不会问这个问题,除非你观察到了导致你怀疑的行为。因此,让我们考虑一下哪些因素可能会导致此问题:

  • 这是 可能的 在保存结果的客户端修改 ViewState(尽管这并不简单,而且绝对不推荐)。
  • 您可以在初始页面视图之前伪造回发。
  • 您可以使用 javascript 更改发布的 url。

然而,对于所有这些事情,如果您写过任何东西来做到这一点,您肯定会知道。

其他提示

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

对于回发,网址通常不会更改。

当然可以使用像FireBug这样的工具在回发之前编辑表单标记中的URL,但是您可能不希望用户注入的值仍然是原始值。

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

在现实世界中,你应该期望恶意的人会试图劫持你的网站,并且需要关注像注射攻击

您应该从不做出任何假设,即在回发上收到的数据是有效的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top