Javascript 使网页只能通过网站上的导航菜单访问

Javascript 使网页只能通过网站上的导航菜单访问,javascript,jquery,Javascript,Jquery,是否有任何方法可以确保我的网站的所有页面只能通过网站上的导航菜单访问,并且没有人可以使用地址栏访问该页面 例如,假设我的网站位于http://www.foobar.com并且有页面http://www.foobar.com/home,http://www.foobar.com/contact等。我是否可以通过输入这些地址以及仅通过我在网站上提供的导航来限制这些页面的访问?嗯……您可以将所有数据编码为非人类可读的形式(如ROT 13),使用反CSRF样式的nonce保护对它的访问,并使用XMLHt

是否有任何方法可以确保我的网站的所有页面只能通过网站上的导航菜单访问,并且没有人可以使用地址栏访问该页面


例如,假设我的网站位于
http://www.foobar.com
并且有页面
http://www.foobar.com/home
http://www.foobar.com/contact
等。我是否可以通过输入这些地址以及仅通过我在网站上提供的导航来限制这些页面的访问?

嗯……您可以将所有数据编码为非人类可读的形式(如ROT 13),使用反CSRF样式的nonce保护对它的访问,并使用XMLHttpRequest加载它,以便在将其添加到页面之前可以使用JavaScript对其进行解码


…但整个想法与web的想法相反,并且确实对用户不利。

您可以附加一个表单,其中包含每个导航菜单选项,并带有不同的隐藏输入值,然后在其他页面(如联系人)上检查该值。如果不存在post值,则可以将页面重定向回旧页面。

但这种想法对用户来说并不友好,因为用户习惯于直接导航到其他页面,这主要是因为历史记录中的浏览器站点建议,也因为他们不想首先进入主页,所以有记忆来记住确切的站点。

我建议您使用以下方法:

  • 在客户端,单击处理程序将
    附加到每个导航菜单链接,其中
    一些令牌值通过Javascript存储在cookie中
  • 在服务器端检查访客的cookie是否存在适当的 标记并检查其值
  • 代码可能如下所示:

    HTML:

    PHP:


    不太可能,但我也希望听到任何想法:)你可以让它变得困难,但我认为你无法完全阻止它。您可以做一些事情,比如从导航栏向链接添加某种字符串,如果该参数不存在,则阻止访问。但是,通过检查页面的标记可以很容易地绕过这一点……在导航项(客户端)的单击事件中生成某种随机令牌,然后告诉服务器期望的令牌(通过Ajax),然后用令牌重定向用户(仍然是客户端)。然后,在服务器端,检查是否提供了正确的令牌。当然,这只有在客户端启用JavaScript时才有效。@azeós出于好奇;)@卡姆拉纳迈德:很公平
    <a href="..." class="nav-menu">...</a>
    
    $(document).ready(function(){
        $('a.nav-menu').click(function(){
            // setCookie() is function that set Javascript cookie
            setCookie('mytoken', 'mytoken_value');
        });
    });
    
    if (isset($_COOKIE['mytoken']) && $_COOKIE['mytoken'] == 'mytoken_value') {
    ...
    }