我已经开始在codeigniter中构建一个Image base网站。主要的目标是保护Image免受直接URL访问或任何类型的下载。我所做的是制作.htaccess并放入Image文件夹以防止直接访问Image。并创建一个类调用Img和一个函数jpg来调用图像。我检查会话以防止Image HotLinks。 但现在的问题是,如果我点击img src(http://localhost/myproject/Img/jpg/abc.jpg),那么图像就会打开。如何防止它。
我的.htaccess
#
请帮助。 在此先感谢。
答案 0 :(得分:3)
主要目标是保护Image免受直接URL访问或任何类型的下载。
不要把它放在互联网上。
如果您还希望在您的网站上访问您的图片,那么您无法做任何事情来真正防止这种情况。
答案 1 :(得分:0)
当它不是来自您的域时,它会重定向到imagae。将其更改为
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://(www\.)?example.com.*$ [NC]
RewriteRule ^.*\.(gif|jpg)$ http://www.example.com [F]
第一个条件是不必要的,因为它包含在第二个条件中。但由于我假设您没有在您的网站上提供直接链接,我不确定第二个是否也需要。您的脚本将从文件系统中读取而不是发出http请求。
但是人们仍然可以截取屏幕截图等。
答案 2 :(得分:0)
我的意思是说是保护最高级别的任何解决方案。必须有解决方案我希望
因此,在验证会话或其他内容后,让服务器通过引用加载文件。还要为私有目录定义一个常量(在本例中,我在'FILES'常量中使用'/ home / web / site')将存储图像。
使用php-gd只是一个示例:
image.php
<?php
defined('FILES') OR define('FILES', '/home/web/site/');
if($_GET['img']){
$filename = FILES.$_GET['img'];
if(file_exists($filename)){
$file_info = getimagesize($filename);
foreach ($file_info as $i => $v){
if($v == 'image/png'){
$mime = $v;
$img = imagecreatefrompng($filename);
}
elseif($v == 'image/jpg'){
$mime = $v;
$img = imagecreatefromjpg($filename);
}
}
header("Content-type: " . $mime);
imagepng($img);
imagedestroy($im);
}
else{
echo 'Image not found!';
}
}
else{
echo 'Image not defined!';
}
上面的算法很简单:你只需要传递完整的文件名(比如'some.jpg')来验证访问权限。当然,您可以创建更好的验证方法。
您也可以对视频做同样的事情。值得学习类似VideoStream.php的内容:
stream.php
<?php
include 'VideoStream.php';
defined('FILES') OR define('FILES', '/home/web/site/');
$video = new VideoStream(FILES.'videoname.mp4');
$video->start();
您还可以在此处定义相应的权限,并将内容加载到浏览器中。