【问题标题】:Url hash as password网址哈希作为密码
【发布时间】:2013-11-21 15:19:43
【问题描述】:

当用户键入带有自定义哈希 ex url 的 url 时:example.com/YT6pTeHDNoROFuXeeDiS

然后网站将该哈希值验证为密码

然后重定向到前网址:example.com/placeToBe

但是当直接访问 example.com/placeToBe 时,它会询问自定义哈希或显示错误页面或重定向

简而言之:
YT6pTeHDNoROFuXeeDiS 对应于 placeToBe 目录,而不是相反

数据库示例:
MJJFWYQYKLXULGTWIE5M => placeToBe1
3O5OBD77M5S12ZD2PHXY => placeToBe2
IHVL7LMRTL02NJJN6LPA => placeToBe3
...

我知道如何在 php 中执行此操作:
当输入哈希 url 时,浏览器被重定向到自定义 404 页面,
如果哈希通过并验证,则该 404 页面包含哈希过滤器
然后脚本为相应的目录创建cookie,然后
重定向到该目录
目录索引请检查,好的,你得到了我的 cookie :D 然后允许浏览
它的内容。



但我的兴趣在于 .htaccess 和 apache 巫术,因此我的问题是:
如何有条件地设置和检查 cookie,然后使用 .htaccess 重定向到正确的目录?

【问题讨论】:

    标签: php apache .htaccess redirect


    【解决方案1】:

    您实际上可以做得比使用 htaccess 强制访问限制更好:

    1. 登录时设置一个随机值的cookie
    2. 在某个位置创建与该值对应的文件
    3. 将用户直接发送到访问受限的 url

    然后,添加条件重写规则:

    • 如果存在与cookie名称对应的文件,让他们通过
    • 如果没有,将用户重定向到 403 或登录屏幕

    我的 RewriteRule-foo 有点生疏了,但你基本上需要在第一个 RewriteCond 中对%{HTTP_COOKIE} 使用捕获正则表达式,然后在后续 RewriteCond 中使用捕获来检查文件是否存在(使用 @ 987654322@).

    如果一切都解决了,那么:

    RewriteRule ^ - [L]
    

    在后续规则中,仅检查 cookie 是否存在,如果存在则返回 403:

    RewriteRule ^ - [F]
    

    在最后一条规则中,返回一个登录屏幕;例如:

    RewriteRule ^ /login [L]
    

    哦,在每种情况下,不用说第一个 RewriteCond 应该只对受限 URI 强制执行这些规则 - 否则,例如,由于登录屏幕上的重写循环,您将收到 500 错误。

    当用户退出时,删除cookie和相应的文件。

    要删除零散的部分,请定期删除过期文件,例如如果 cookie 设置为一周,则超过一周的相应文件应被丢弃,并在用户刷新会话时触及现有文件。

    【讨论】:

      【解决方案2】:

      你根本不需要 .htaccess / mod_rewrite 来做你想做的事。

      而不是强迫用户去像这样的网址:

      example.com/YT6pTeHDNoROFuXeeDiS

      给他们这样的网址:

      example.com/validation.php?hash=YT6pTeHDNoROFuXeeDiS

      validation.php中:

      if (isset($_GET['hash']))
      {
         // do your validation stuff here
      
         // redirect to some place - if you want but there is no need - you can
         // do everything here
         header( 'HTTP/1.1 303 See Other' );
         header( "Location: someUrl" );    
      }
      else
      {
          header( 'HTTP/1.1 303 See Other' );
          header( "Location: someOtherUrl" );    
      }
      

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 2012-07-07
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 2017-08-16
        • 2015-11-30
        相关资源
        最近更新 更多