禁止用户直接访问网站页面的智能方法

时间:2009-06-13 03:42:39

标签: asp.net webforms

网站有100个页面,位于某个站点地图之后。用户可以从page1.aspx导航到page2.aspx。但是,如果用户直接通过书籍标记的URL转到page2.aspx,则应将用户重定向到page1.aspx。

编辑:我不想进入并为每个需要满足此需求的页面添加代码。

注意:这不是跨页回发方案。

5 个答案:

答案 0 :(得分:1)

我猜您可以检查推荐人,如果没有推荐者,或者它不是page1.aspx,那么您可以重定向回page1.aspx。

答案 1 :(得分:1)

您可能会考虑基于WorkFlow的内容,例如:http://blogs.msdn.com/mwinkle/archive/2007/06/07/introducing-the-pageflow-sample.aspx

WCSF团队还包含一个pageflow application block,您可以将其用作应用程序的独立插件。

答案 2 :(得分:1)

正如另一位回答者所提到的,你可以使用Referrer标题,但这可以由客户伪造。

由于您不想修改每个页面,因此可以使用IHttpModule执行某些操作。假设您有一些描述有效页面导航的方法,您可以在BeginRequest处理程序中执行以下操作:

  • 检查会话是否有有效页面列表(如果会话中没有任何页面,则使用默认列表进行首次访问)。
  • 如果此请求是针对无效页面的,请重定向到用户所在的位置。
  • 根据此请求,在会话中设置有效页面列表和重定向页面,以便为下一个请求做好准备。

答案 3 :(得分:1)

我最近使用真实代码检查了引用者是否为空,并将其作为授权步骤使用。这个想法是用户无法伪造推荐人,你不需要自定义浏览器伪造推荐人。用户可以将您的页面标记为美味,然后delicious.com是推荐人(而不是空白)。

我有一个真实的论点,即用户需要多么复杂才能做某些黑客攻击 - 即如果用户不知道如何设置推荐人,那么你可以相信它。虽然如此,但您的用户不太可能编写自定义浏览器,但已经有Firefox插件来设置标题,引用等等,并且它们易于使用。

Josh有最好的答案 - 在第2页上你应该检查页面点击日志,看看用户是否最近访问过page1

答案 4 :(得分:0)

我非常喜欢上面的答案(特别是工作流程)。

另一种选择是将每个页面创建为usercontrol并使page1.aspx控制加载的usercontrol。这样做的好处是可以将工作流程存储在一个地方而不是每个页面上。

然而,我不认为那里有一个神奇的子弹。听起来这个安全问题是一个事后的想法,或者可能是一个bug报告,你的任务是快速有效地修复它。

我会开始权衡这里的答案以及相关的成本(以小时为单位)。我怀疑最快的解决方案是检查每页上的推荐人地址。虽然是可以破解的,但它是模糊不清的,如果你可以接受这种风险,它可能是适当的解决方案。