仅允许从特定页面访问链接?

6
我正在尝试制作一个只能从批准的网站访问的页面,但我不知道如何处理。我应该提供一段PHP代码片段来生成一个随机键并将其附加到URL上,这个键只有一次访问是有效的吗?
或者在其他域中设置一个cookie,并在最终目标地读取它是否可行?也许它会是初始页面上的1像素IFrame元素?
或者我只是在努力做一些永远不可能实现的事情?

你是否对源网站和目标网站都有控制权?如果是这样,我会使用一个加密选择并在两个网站之间协调的 cookie(至少是被动的,如 cookie 必须有效签名、具有接近的时间戳,并且不是明显的重复)。 - nanofarad
2
也许可以看一下https://en.wikipedia.org/wiki/HTTP_cookie#window.name,其中提到:“所有现代Web浏览器都可以通过使用DOM属性window.name使用JavaScript存储相当大量的数据(2-32 MB)。此数据可用于替代会话cookie,也是跨域的。该技术可以与JSON / JavaScript对象配对使用,以在客户端上存储复杂的会话变量集[51]。”加密签名的身份验证数据可以存储在那里。 - nanofarad
@AliR。这不是一种可靠的方法,因为这些数据来自客户端,客户端可以发送任何它想要的数据。 - ComFreek
你试图防范什么样的误用?如果客户欺诈性地假装来自一个已批准的网站,这是一个问题还是不是问题? - adhominem
1
@zen 那么你实际上可以简单地检查引荐来源。它可以像帖子一样轻易被伪造,但对于已批准的网站来说,它的干扰性较小(它们不需要做任何改变)。 - adhominem
显示剩余4条评论
2个回答

2
在评论中,我们澄清了以下内容...

我(zen)只需要一种方法来保护页面,而不需要每个用户都有登录凭据,或者根本不需要登录。我想到的另一个选择是,每次他们单击链接时都进行POST发送,如果POST包含特定密钥,则我的页面将允许他们进入。[...]

由于检测欺诈访问不是问题,我建议您仅针对已批准的站点(和/或页面)检查http referer。对于已批准的站点来说,这是非侵入性的,并且提供的安全性与您检查的固定后置标记一样好。
在PHP中,如果可用,引荐者位于$_SERVER['HTTP_REFERER']变量中。

-2

好的,这就是答案

<?php
$server = $_SERVER['SERVER_NAME'];          //Getting Server name
$site_name = "http://$server";              //Creating Website URL from SERVER_NAME
$url_allowed = array("http://www.allowed1.com", "http://www.allowed2.com"); //Add Allowed Website list Here
if(in_array($site_name,$url_allowed)){
echo "<a href='***your link here***'>This is Link</a>";
}else{
echo "This Link is Not Allowed For Your Site";
}
?>

2
-1 是因为这并没有解决问题,相反,它只是在预定义的数组中搜索服务器名称。这与 OP 的问题有什么关系呢? - ComFreek
1
这似乎完全验证了不同的东西。 - nanofarad
在与@zen的交谈后,似乎引荐者检查是处理这个问题的合理方式。我编辑了答案以反映这一点。 - adhominem
@adhominem 很抱歉,但我回滚了之前的版本。编辑不是为了新想法或更大的改进(除非问题是社区维基)。请发布一个新答案 ;) - ComFreek
好的,我会这样做。 - adhominem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接