Url哈希作为密码


Url hash as password

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

然后网站验证该散列作为密码

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

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

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

数据库示例:
MJJFWYYYKLXULGTWIE5M=>placeToBe1
3O5OBD77M5S12ZD2PHXYIHVL7LMRTL02NJJN6LPA=>placeToBe3


我知道如何在php中做到这一点:
当输入hashurl时,浏览器将重定向到自定义404页面,
如果hash通过并验证
,则该404页面包含hash的筛选器然后脚本为相应的目录创建cookie,然后
重定向到该目录
目录索引善意地检查,好吧,你得到了我的cookie:D,然后允许浏览
其内容。



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

实际上,使用htaccess强制执行访问限制可以做得更好:

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

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

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

我的RewriteRule foo有点生疏,但您基本上需要在第一次RewriteCond中对%{HTTP_COOKIE}使用捕获regex,然后在后续的RewriteCon中使用捕获来检查文件是否存在(使用-f)。

如果全部清除,则:

RewriteRule ^ - [L]

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

RewriteRule ^ - [F]

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

RewriteRule ^ /login [L]

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

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

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

您根本不需要.htaccess/mod_rewrite来执行您想要的操作。

而不是强迫用户转到类似的URL

example.com/YT6pTeHDNoROFuXeeDiS

给他们这样的网址:

example.com/validation.php?hash=YT6pTeHDNoROFuXeeDiS

以及在验证.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" );    
}