如何防止在CodeIgniter中直接url访问中打开image.php链接

时间:2017-05-21 05:14:06

标签: php html image .htaccess codeigniter

我已经开始在codeigniter中构建一个Image base网站。主要的目标是保护Image免受直接URL访问或任何类型的下载。我所做的是制作.htaccess并放入Image文件夹以防止直接访问Image。并创建一个类调用Img和一个函数jpg来调用图像。我检查会话以防止Image HotLinks。  但现在的问题是,如果我点击img src(http://localhost/myproject/Img/jpg/abc.jpg),那么图像就会打开。如何防止它。

我的.htaccess

#

请帮助。 在此先感谢。

3 个答案:

答案 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();

您还可以在此处定义相应的权限,并将内容加载到浏览器中。