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

use*_*171 1 html javascript

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

Kon*_*lph 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]
Run Code Online (Sandbox Code Playgroud)

编辑:我刚检查了手册 ...不幸的是,这里不能提供401状态代码.因此上述解决方案并不完美,因为虽然它阻止了访问,但它并没有相应地设置HTTP状态.: - /在我的嘴里留下了不好的味道.


Pis*_*3.0 5

唯一有效的方法是在服务器上设置和检查一些访问令牌(在客户端操作任何数据都是微不足道的,因此普通的JS和HTML是不够的;对于Referer头部来说是相同的).PHP中的简化示例:

gate_page.php:

<?php
session_start();
$_SESSION['allowed_access'] = true;
?><a href="protected_page.php">Protected area</a>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

当然,添加一些密码检查和/或其他安全元素很容易,这是最低限度的.