1

我有一个托管图像的网站,可以直接共享和链接。我在某处读到这是一个坏主意。我如何应用简单的间接方法,同时保持现有链接一段时间,直到它们从 Facebook 上消失?

4

1 回答 1

2

下面的旧答案。

创建无法直接链接到的链接的示例:

$expire = 60 * 5; // 5 minutes;
$time = $_SERVER['REQUEST_TIME'] + $expire;
$image_id = $image_id;
$secretpassword = "secretpassword";

function generate_link($image_id, $time, $secretpassword) {
    $hash = md5($secretpassword . $time . $image_id);
    return "image.php?" . http_build_query(array(
        'image_id' => $image_id,
        'time' => $time,
        'hash' => $hash,
    ));
}

function is_link_valid($image_id, $time, $hash, $secretpassword) {
    if ($hash !== md5($secretpassword . $time . $image_id)) {
        return false; // hash is invalid
    }
    if ($time < $_SERVER['REQUEST_TIME']) {
        return false; // link has expired
    }
}

像这样使用:

generate_link($image_id, $time, $secretpassword);
is_link_valid($_GET['image_id'], $_GET['time'], $hash, $secretpassword);

您在生成的链接中放置了两位信息:图像 ID 和链接到期的时间(因此您不能直接链接)。此外,您添加了一个散列,以便没有人可以“弄乱”变量,只有您知道如何生成散列(取决于$secretpassword)。

这些链接在 5 分钟后过期,或者您设置$expire的任何时间。

一个问题是这些链接看起来不太漂亮。我知道让它们看起来更漂亮的方法,但这超出了这个问题的范围。


旧答案

我假设您的意思是您共享其他域(如 Facebook)上的图像。

您描述的问题是您正在通过使用其他域的图像(和带宽)“窃取”其他域。我不知道 Facebook 关于直接链接的政策,但对于较小的网站来说,这是一个真正的负担。添加间接性并不能解决这个问题。

解决它的唯一方法是将图像上传到图像服务器,可以是免费的,也可以是您自己控制的。您可以让您的用户执行此操作,或者您可以为他们执行此操作。如果您不控制图像服务器,则很难实现自动化,但是拥有图像服务器可能会非常昂贵(带宽很昂贵)。让用户这样做会给他们带来负担,并且可能会降低您的网站的吸引力,因为他们需要执行额外的步骤。

我认为这些是您的选择。

于 2011-06-02T18:21:34.853 回答