Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Joomla:限制对图像和视频的热链接访问_Php_Joomla - Fatal编程技术网

Php Joomla:限制对图像和视频的热链接访问

Php Joomla:限制对图像和视频的热链接访问,php,joomla,Php,Joomla,我希望能尽快得到帮助:) 问题在于: 我构建了一个定制组件(php软件),它很快将被列在Joomla扩展目录中供用户下载。在此组件中,图像和视频通过URL链接(热链接) 现在在我的网站上,用户需要付费订阅 我想要实现的只是允许我构建的组件被授予在我的网站上拥有活动订阅的用户对图像和视频的访问权限,并将组件对图像和视频的访问权限限制为订阅已过期的用户 我只是想知道怎么做。 非常期待您的回复,谢谢。因此我知道您会允许免费下载该组件,但它不会向过期用户或未注册用户显示热链接媒体 我猜您必须将注册用户主

我希望能尽快得到帮助:)

问题在于: 我构建了一个定制组件(php软件),它很快将被列在Joomla扩展目录中供用户下载。在此组件中,图像和视频通过URL链接(热链接)

现在在我的网站上,用户需要付费订阅

我想要实现的只是允许我构建的组件被授予在我的网站上拥有活动订阅的用户对图像和视频的访问权限,并将组件对图像和视频的访问权限限制为订阅已过期的用户

我只是想知道怎么做。
非常期待您的回复,谢谢。

因此我知道您会允许免费下载该组件,但它不会向过期用户或未注册用户显示热链接媒体

我猜您必须将注册用户主机保存在一个表中,而不是直接通过php脚本热链接到映像,该脚本将在显示映像或“未订阅”回退映像之前检查订阅状态(基于请求主机url)

另一种方法是在.htaccess或nginx的vhost定义中限制Web服务器中的内容。但这意味着要不断地手动添加或删除支撑

非常松散的示例:您的用户请求将图像作为

<img src="http://yoursite.com/image.php?img=akdbnrieodoidnsd"/>
您必须实现valid\u-suscriber函数,以对照您的suscriber表检查http\u-referersuscribersite.com。不过,请注意,http\u referer很容易被欺骗


您案例的真正解决方案是在任何请求之前执行oauth握手,并将oauth令牌附加到每个后续请求中。这要麻烦得多,但不太容易被篡改。

对于那些已订阅的用户,我假设您有一个额外的列来确定他们是否有活动订阅。例如
active=0
active=1
。您可以简单地编写一个
if-else
语句,这非常简单。我的意思是,例如,你下载我的软件并安装在你的web服务器上,你下载的软件如何检查你的订阅是否在我的web服务器上打开或关闭,如果订阅是真的,我不想把完整的url放在图片上。因为一些程序员可能能够嗅探代码并关闭本地if-else语句。这是个好主意。例如,假设所有用户都有许可证密钥,我将如何使扩展查询成为我的Web服务器数据库,以检查许可证是否处于活动状态?是的,这个想法确实为我做到了。谢谢你,阿梅纳迪尔
$imghash=$_GET['img'];
//strip non alphanumeric characters, to avoid malicious requests
$cleanhash =preg_replace('/[^a-z_\-0-9]/i','', $imghash);

header('content-type: image/png');
if(valid_suscriber($_SERVER['HTTP_REFERER'])) {
    $img = file_get_contents("/non-public-directory/$cleanhash.png");
} else {
    $img = file_get_contents("/non-public-directory/unauthorized.png");
}

echo $img;