时间敏感的网页访问

时间:2009-12-04 21:46:58

标签: asp.net

如果传递了正确的时间敏感变量,是否可以创建重定向到私人页面的页面?

例: http://www.mysite.com/redirectpage.aspx?code=0912042400

代码值是一个年 - 月 - 日 - 时间组合,必须根据服务器的时间在一些时间窗口(15分钟,30分钟等)下降。

如果代码有效或显示404,重定向页将解析代码并重定向到私有页面(使用带代码变量的模糊URL)。

使用场景:

  • 甲方希望向乙方显示私人页面。
  • A发送一个指向B的链接,其代码在接下来的30分钟内有效。
  • B点击该链接并重定向到私人页面。
  • 点击链接31分钟后会产生404,私人页面的刷新/回发也会产生404.

由于

7 个答案:

答案 0 :(得分:1)

对于数据库连接的Web应用程序来说,这是一项简单的任务。基本算法是将“票证”插入数据库表。票证将由随机字符串和时间戳组成。

当请求进入页面时,生成该页面的脚本可以在票证表中查看是否存在与通过URL参数传入的代码匹配的记录。如果有记录,则脚本会检查时间戳是否过期。如果是,请生成404页面。否则显示正确的信息。

可能有预先构建的内容管理系统模块或caned脚本可以执行此操作,但我自己也不知道。

答案 1 :(得分:1)

是。

一种方法是将“有效开始时间”与仅为服务器知道的私有字符串连接起来。基于该连接值生成包含代码(例如,MD5哈希)。将“有效开始时间”和哈希值发送回客户端。他们将两者都传回来查看该页面。服务器将“有效开始时间”与密钥重新组合,重新计算散列,并确保它与传入的散列匹配。如果匹配,则将传入的时间与服务器时间进行比较,以确保重定向仍然有效。

不需要有效密钥的数据库以及它们与此方法相关的时间范围。您甚至可以将重定向的页面名称添加到使系统完全独立的时间。

Server computes:

Hash = md5("2009-12-12 10:30:00" + "MyPage.aspx" + Secret Key)

Send to client:

"2009-12-12 10:30:00" + "MyPage.aspx", Hash

Client later sends to server

"2009-12-12 10:30:00" + "MyPage.aspx", Hash

Server checks

newHash = md5("2009-12-12 10:30:00" + "MyPage.aspx" + Secret Key)
Hash == newHash?
Yes and time within window then redirect, else error.

答案 2 :(得分:0)

例如,在ASP.net中,我会使用代码和重定向页面缓存一个keyvaluepair,并将缓存超时设置为30分钟,这只是一个简单的例子,但这很有可能。

答案 3 :(得分:0)

您将遇到的一个问题是简单地更改网址和查看私人信息是多么容易。

我将采取的方法是:

  1. 生成私人页面时,使用加密密钥在数据库中创建一条新记录,其中包含起始可用时间和起始结束时间。
  2. 将此加密ID放入网址。
  3. 当此人访问该页面时,查找时间戳,确保它们在范围内,然后将其重定向到404页面。

答案 4 :(得分:0)

执行此操作的一种方法是将页面作为查询字符串的一部分传递加密的时间限制。像http://www....aspx?timelimit=[encrypted]这样的东西。其中[加密]不是用户可编辑的。您可能只需要以某种方式散列DateTime。

答案 5 :(得分:0)

是的,你可以这样做。但是,在传递的值中编码有效日期范围是一种安全风险。

更好的方法是生成随机代码并将该代码存储在数据库中,并附上代码有效的日期范围。

这样,恶意用户猜测有效值的机会就会减少。

答案 6 :(得分:0)

提前知道X分钟何时开始?有些网站有特定时间(小时,天等)的促销代码,如果您提前知道,可以检查来自客户的请求是否在这些时间内。

如果你不提前知道,这就是我要做的。

  1. 确保用户指定的令牌/代码有效

  2. 使用代码作为会话密钥创建会话对象(您可以在asp.net中执行此操作,不确定其他编程语言)和IP(或任何唯一字符串作为该键的值,如果落后代理,IP将无法工作,因此生成GUID并在发送响应时将其作为安全cookie传递给客户端)。这将阻止多个用户同时访问安全资源(虽然不确定这是否属于您的要求)

  3. 记下会话中的第一个请求时间和DB

  4. 您可以在X分钟(Get Session to expire gracefully in ASP.NET)之后使会话失效。

  5. 对于后续请求,检查客户端发送的密钥(cookie)的有效性(针对服务器端值)和第一个请求时间+ X分钟的请求时间,如果密钥&时间有效,让他访问资源,如果Key无效,告诉已经使用过的会话正在进行中

  6. 如果用户在X分钟后尝试访问它,(您从会话中知道它)发送“您的页面无法提供,因为您的X分钟已经过期,因为第一次访问该页面”而不是发送404(404表示未找到资源且不会传达请求时间无效)或将其登出