除非来自特定页面,否则限制对页面的访问

时间:2008-10-31 20:55:24

标签: javascript html

我正在试图弄清楚如何限制对页面的访问,除非页面从特定的“门”页面导航到。基本上我希望页面无法访问,除非你来自我的站点地图中的页面。我不确定这是否可能。如果可能,您可以限制使用html或javascript的建议吗?

5 个答案:

答案 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_pa​​ge.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来实现它。