自动获得 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');
?>
所以我的问题是:
- 是否可以完整 URL 显示我图片的网站?
- 如果没有,有没有其他方法可以得到完整的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
.
通常情况下,浏览器会发送包含所有 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
发送时来自和去往:
- 从 HTTP 到 HTTP
- 从 HTTPS 到 HTTPS
- 从 HTTP 到 HTTPS
但是它不是发送的,它来自和去往:
- 从 HTTPS 到 HTTP
在我的例子中,我不知道为什么,不是 从 HTTP 发送到 HTTP,这让我很困惑。
我一直在尝试获取显示我的图片的网站的 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');
?>
所以我的问题是:
- 是否可以完整 URL 显示我图片的网站?
- 如果没有,有没有其他方法可以得到完整的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
.
通常情况下,浏览器会发送包含所有 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
发送时来自和去往:
- 从 HTTP 到 HTTP
- 从 HTTPS 到 HTTPS
- 从 HTTP 到 HTTPS
但是它不是发送的,它来自和去往:
- 从 HTTPS 到 HTTP
在我的例子中,我不知道为什么,不是 从 HTTP 发送到 HTTP,这让我很困惑。