Javascript禁止访问在浏览器中直接输入的页面

时间:2018-09-29 10:29:35

标签: javascript iframe browser

是否可以禁止访问直接在浏览器中键入的页面,但如果URL来自iframe,也可以禁止访问该页面?

1 个答案:

答案 0 :(得分:1)

您可以绕过

任何客户端检查。为了使机制更健壮,您需要使用服务器:单击链接将带有浏览器签名(包括IP)的消息发送到服务器,并以日期/时间进行记录。当请求受保护的页面时,请检查请求中的浏览器签名,并确保它与在请求之前的可接受时间内收到的签名匹配。也可以绕开它,轻松一点。

就仅客户端机制而言(很容易被绕过):

  • 您可能会让人们将您指向document.referrer,但是极其很容易被欺骗,我不会依赖它。

  • 我能想到的唯一其他方法是,如果两个页面都来自同一原点。如果是这样,当用户单击iframe中的链接时,您可以在localStorage中设置一个值:

    // (In a click handler on the link)
    localStorage.setItem("clicktime", Date.now());
    

    ...并在页面中:

    var MAX_DURATION = 500; // milliseconds
    var clicktime = localStorage.getItem("clicktime");
    if (!clicktime || isNaN(clicktime) || Date.now() - MAX_DURATION > 500) {
        // Disallow access by (for instance) redirecting or similar
    }
    

...但是,客户端机制很容易被绕过。