我正在试图弄清楚如何限制对页面的访问,除非页面从特定的“门”页面导航到。基本上我希望页面无法访问,除非你来自我的站点地图中的页面。我不确定这是否可能。如果可能,您可以限制使用html或javascript的建议吗?
答案 0 :(得分:6)
如果可能,您可以限制使用html或javascript的建议吗?
没有。 因为没有安全的方法只使用这两种技术。在客户端进行的所有操作都可能被操纵(非常简单)。如果您想确定,则必须通过检查REFERER
(sic!)标题在服务器端强制执行此操作。
介意,即使这可以被操纵。
如果您在启用mod_rewrite
的情况下使用Apache,则以下代码将根据引用页面限制访问:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://www\.example\.com/.*
RewriteRule /* http://www.example.com/access-denied.html [R,L]
编辑:我刚检查了the manual ...遗憾的是,此处无法提供401状态代码。因此上述解决方案并不完美,因为虽然它阻止了访问,但它并没有相应地设置HTTP状态。 : - /在我嘴里留下了不好的味道。
答案 1 :(得分:5)
唯一有效的方法是在服务器上设置和检查一些访问令牌(操作客户端的任何数据都很简单,因此普通的JS和HTML是不够的; Referer
标题也是如此)。 PHP中的简化示例:
gate_page.php:
<?php
session_start();
$_SESSION['allowed_access'] = true;
?><a href="protected_page.php">Protected area</a>
protected_page.php:
<?php
session_start();
if (!$_SESSION['allowed_access']) {
header('Location: gate_page.php');
echo 'Go through the <a href="gate_page.php">entry page</a> first.';
exit();
}
// whatever happens to be at the protected page
当然,添加一些密码检查和/或其他安全元素很容易,这是最低限度的。
答案 2 :(得分:1)
如果加密变量(如当前日期)并将其放在“门”链接中,该怎么办?当您到达新页面时,脚本会对变量进行解密,如果该变量不匹配或者甚至不匹配,则脚本会重定向到另一个页面。
类似的东西:
<a href="restricted.php?pass=eERadWRWE3ad=">Go!</a>
编辑:我不太清楚JS打印该代码,但我知道有several libraries可以为您完成所有加密/解密。
答案 3 :(得分:0)
使用javascript命名一个名为“previous”的变量,并将其值设置为document.referrer。然后执行条件以确定引用者是否是正确的页面,如果不是,则重定向它们
答案 4 :(得分:0)
document.history.previous
应该为您提供历史记录对象中最后一个文档的URL。否则,没有更好的方法通过HTML和Javascript来实现它。