Asp.net 对时间敏感的网页访问

Asp.net 对时间敏感的网页访问,asp.net,Asp.net,如果传递了正确的时间敏感变量,是否可以创建重定向到私有页面的页面 例: 代码值是一个年-月-日-时间组合,必须根据服务器的时间在某个时间窗口(15分钟、30分钟等)内落下 如果代码有效或显示404,重定向页面将解析代码并重定向到私有页面(使用带有代码变量的模糊url) 使用场景: 甲方希望向乙方展示一个私人页面 A向B发送一个链接,其代码在接下来的30分钟内有效 B单击链接并被重定向到私人页面 31分钟后,点击链接产生404,刷新/回发私人页面也产生404 作为一个例子,在ASP.net中

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

例:

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

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

使用场景:

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

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

您将遇到的一个问题是,简单地更改url和查看私有信息有多容易

我会采取以下方法:

  • 生成私有页时,使用加密密钥在数据库中创建一条新记录,该密钥包含开始可用时间和开始结束时间
  • 将此加密ID放入URL中
  • 当用户转到页面时,查找时间戳,确保它们在范围内,然后将它们重定向到404页面

  • 一种方法是将加密的时间限制作为查询字符串的一部分传递给页面。类似于
    http://www....aspx?timelimit=[加密]
    。其中[encrypted]不是用户可编辑的。您可能只需要以某种方式散列日期时间。

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

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


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

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

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

    可能有一个预构建的内容管理系统模块或caned脚本可以做到这一点,但我自己也不知道

    一种方法是将“有效开始时间”与只有服务器知道的私有字符串连接起来。基于该串联值生成has代码(例如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.
    

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

    如果你不提前知道,我会这么做

  • 确保用户给定的令牌/代码有效

  • 创建一个会话对象,使用代码作为会话密钥(您可以在asp.net中这样做,但不确定是否使用其他编程语言)和IP(或任何唯一字符串作为该密钥的值,如果在代理后面,IP将不起作用,因此在发送响应时生成GUID并将其作为安全cookie传递给客户端)。这将防止多个用户同时访问安全资源(但不确定这是否是您的需求的一部分)

  • 记下会话和数据库中的第一个请求时间

  • 您可以在X分钟后使会话过期()

  • 对于后续请求,请检查客户端发送的密钥(cookie)的有效性(与服务器端值相对),以及第一次请求时间+X分钟的请求时间,如果密钥和时间有效,则让他访问资源,如果密钥无效,则告诉所用用户已经有一个正在进行的会话

  • 如果用户在X分钟后试图访问它,(您从会话中知道),则发送“您的页面无法使用,因为您的X分钟自第一次访问该页面以来已过期”,而不是发送404(404表示资源未找到,并且不会表示请求时间无效)或注销


  • 如果“那样”指的是我的解决方案,那就是密钥和md5散列的含义。使用足够长的密钥,猜测有效密钥的风险几乎为零http://www.foobar.com/abc.aspx=3我可以通过它进入我的浏览器并将3更改为4。即使是html表单也可能被有意愿的人入侵(他们可以编辑html并使用它发布他们想要的任何值)。不过,大多数人可能不会遇到这种麻烦。这是我的观点。你说的“哪里[加密]不是用户可编辑的”是什么意思?智能用户可以看到纯文本时间(如上午10:00),并知道如何编辑它。加密阻止了“如何”并使用户编辑变得毫无意义。这就是我想要的