如何限制对文件的访问CI中的文件夹中(How to restrict access to files

2019-07-31 08:13发布

你好,我已经使用笨来开发自己的网站,但是当我的网站在谷歌搜索,谷歌显示了链接到文件(PDF)在一个特定的文件夹中,用户可以直接不用登入查看这些文件(PDF)。 我想限制谷歌直接显示的链接,这些文件。 例如:www.mywebsite / MyFolder文件/文件MyFile

请指导我如何才能做到这一点。 谢谢。

Answer 1:

从以前的小修改的答案 :

放置的.htaccess在您的文件夹与内容

order deny, allow
deny from all

这将拒绝所有访问该特定文件夹。

对于访问文件的编写一个函数在控制器与身体 -

public function index($file_name){
    if($this->login())  // login check
        if (preg_match('^[A-Za-z0-9]{2,32}+[.]{1}[A-Za-z]{3,4}$^', $file_name)) // validation
            {
            $file = 'my_path/'.$file_name;
            if (file_exists($file)) // check the file is existing 
                {
                header('Content-Type: '.get_mime_by_extension($file));
                readfile($file);
                }
            else show_404()
            }
    else    show_404();
}

那么你有一些线在你的配置文件夹添加到您的routes.php文件文件作为这样的

$route['my_files/(:any)'] = "my_controller/index/$1";

这将重定向所有请求myfiles的/ bla_bla_bla到my_controller /索引/ bla_bla_bla

认为这可能帮助:)



Answer 2:

基本上你需要到主机上的文件的文件夹的public_html以外的 - 而是通过PHP ReadFile的为他们服务的对用户()。

像这样的东西会工作

function user_files($file_name = "")
{
    // Check if user is logged in
    if($this->user->logged_in())
        {   
            // Now check the filename is only made up of letters and numbers
            // this helps prevent against file transversal attacks
            if (preg_match('^[A-Za-z0-9]{2,32}+[.]{1}[A-Za-z]{3,4}$^', $file_name)))
            {
                // Rewrite the request to the path on my server 
                $file = '../my_folder/'.$file_name;

                // Now check if file exists
                if (file_exists($file))
                {
                   // Serve the file
                   header('Content-Type: '.get_mime_by_extension($file));
                   readfile($file);
               }
            }
        }
    }
}

注意:您要小心目录横移的 - 所以你应该把一些检查该文件名只由字母



文章来源: How to restrict access to files in a folder in codeigniter