如果网址来自iframe,是否可以禁止访问直接在浏览器中键入但不禁止访问的页面?
最佳答案
您所做的任何客户端检查都可以绕过。为了使机制更健壮,您需要使用服务器:单击链接将带有浏览器签名(包括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
}
...但是同样,客户端机制很容易被绕开。