Url哈希作为密码

时间:2013-11-20 07:01:31

标签: php apache .htaccess redirect

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

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

然后重定向到ex url: example.com/placeToBe

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

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

db示例:
MJJFWYQYKLXULGTWIE5M =>的 placeToBe1
3O5OBD77M5S12ZD2PHXY =>的 placeToBe2
IHVL7LMRTL02NJJN6LPA =>的 placeToBe3
...

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



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

2 个答案:

答案 0 :(得分:0)

实际上,您可以使用htaccess强制执行访问限制:

  1. 在登录时设置带有随机值的Cookie
  2. 在某个位置创建与该值对应的文件
  3. 将用户直接发送到访问受限制网址
  4. 然后,添加条件重写规则:

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

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

    如果全部清除,那么:

    RewriteRule ^ - [L]
    

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

    RewriteRule ^ - [F]
    

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

    RewriteRule ^ /login [L]
    

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

    当用户注销时,删除cookie和相应的文件。

    要删除松散的末端,请定期删除过期的文件,例如如果cookie设置为一周,则超过一周的相应文件应该被删除,并在用户刷新其会话时触摸现有文件。

答案 1 :(得分:0)

您不需要 .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" );    
}