自动获得 URL 个显示我图片的网站?

Automatically get URL of a site displaying my image?

我一直在尝试获取显示我的图片的网站的 URL(包括 GET 参数)。这是因为我想提取 URL.

的一个参数

一位朋友告诉我,她知道有人可以做到这一点,但我不知道他是不是用图像来做的。另外我不认为我可以用 link 来做到这一点,因为当去外部网站时它会出现一个警告页面说你被重定向到外面,所以如果我把 link 到我的页面有人点击,我会得到重定向警告页面的引用 URL。我不能确定我的朋友说的是否属实,但很有可能是真的。

我能从图像中得到的只是 HTTP header 的 IP 和其他内容,但是引荐来源部分是空的,我认为引荐来源包含完整的 URL 我是谈论.

这是我试过的。 首先是BBCode中其他站点的img标签:

[img]http://______.com/get_image.php?i=myimage[/img]

在我的站点中,这个脚本在 PHP 中,尽管任何能完成这项工作的语言对我来说都是好的:

<?php
// Get name of image to be displayed (non-sanitized here for simplicity)
$filename = $_GET["i"];

// Here I want to get the site where image is being viewed
if (!empty($_SERVER['HTTP_REFERER'])) {
        $visitor_url = $_SERVER['HTTP_REFERER'];
} else {
        $visitor_url = "none";
}

// And write the referrer to a file just to test if it works
$fp = fopen('referer.txt', 'w');
fwrite($fp, $visitor_url);
fclose($fp);

// Eventually display the image
header('Content-Type: image/png');
readfile($filename . '.png');
?>

所以我的问题是:

  1. 是否可以完整 URL 显示我图片的网站?
  2. 如果没有,有没有其他方法可以得到完整的URL?

提前致谢。

注意:我在发布图片的其他网站上没有任何权限,我只是那里的用户。如果我遗漏了什么或者我必须以另一种方式问这个问题,请告诉我,我是 Whosebug 的新手。

尝试 REMOTE_HOST 而不是 HTTP_REFERER:

// Here I want to get the site where image is being viewed
if (!empty($_SERVER['REMOTE_HOST'])) {
    $visitor_url = $_SERVER['REMOTE_HOST'];
} else {
    $visitor_url = "none";
}

需要正确配置您提供图像的网络服务器。如果使用 Apache,这是 HostNameLookups On.

http://php.net/manual/en/reserved.variables.server.php

通常情况下,浏览器会发送包含所有 URL 组件的完整引荐来源网址,包括查询参数 - $_GET 参数。如果他们不这样做,那么在通过图像内容时就没有其他方法可以实现 URL。

有时发送引用可能会被阻止,例如。在一些批处理 URL 中使用像 program/script 这样的爬虫或在一些代理上处理。

在 PHP 中,接收引用由 $_SERVER['HTTP_REFERER'] 完成,因为它通常只是来自请求的 http header,并且它是唯一具有引用信息的 $_SERVER 数组键。

您添加了 .htaccess 标记,所以我认为您使用的是 Apache 网络服务器。如果你想完全避免这个问题,你可以通过降低一层来完全禁用热链接。除了在 PHP 中进行管理,您还可以将 Web 服务器配置为不向您托管的域以外的域提供内容。

查看 guide 了解更多详情。

我通过将我的站点(托管图像的站点)切换到 HTTPS 解决了这个问题。我问题中的代码正确地完成了它的工作。

看起来 HTTP_REFERER 是空白的,因为它来自 HTTPS 站点,而我的站点是 HTTP,它总是发送空白。我知道这可能是个问题,但对我来说没有多大意义,因为 HTTP_REFERER 来自另一个 HTTP 站点时也是空白的 (我认为这不是正常)所以我认为错误是在另一个地方。

通常HTTP_REFERER发送时来自和去往:

  1. 从 HTTP 到 HTTP
  2. 从 HTTPS 到 HTTPS
  3. 从 HTTP 到 HTTPS

但是它不是发送的,它来自和去往:

  1. 从 HTTPS 到 HTTP

在我的例子中,我不知道为什么,不是 从 HTTP 发送到 HTTP,这让我很困惑。