为非登录用户保护.PDF和.JPG

时间:2019-03-27 08:53:15

标签: php .htaccess file data-protection

我想建立一个文件夹中包含受保护数据的网站。我在PHP中进行了会话检查,仅在登录时才显示数据。

数据是一对.PDF和.JPG文件。

但是当nog登录的用户使用完整的url搜索时,他可以找到并打开文件。例如:www.domain.com/protected-data/file.pdf

我该如何保护?

我已经对.htaccess做了一些技巧。

Order Allow,Deny
Allow from all
<Files ~ "\.(gif|jpg|png|pdf)$">
Deny from all
</Files>

但是,即使用户登录,此脚本也会拒绝我的所有文件。

1 个答案:

答案 0 :(得分:0)

这个想法是将文件放在一个外部无法访问的目录中。假设您具有以下目录结构:

|_src
     \_.htaccess  
|_private  
     \_.htaccess  
|_public  
     \_read.php  

src / :包含您的类和源代码。
私人/ :包含您的JPG和PDF文件。
public / :包含您的前端控制器,这是Internet上唯一可用的直接控制器。

src / .htaccess

# No one should be able to access your source code from Internet
Deny from All

私人/.htaccess

# No one should be able to access your private files from Internet
Deny from All

这样做只能从Internet访问 public / 目录。在您的 public / 目录中,您可能有一个读取这些文件的PHP文件。这是一个小例子。

public / read.php

<?php
session_start();
//if the user is logged, read the file and echo it
if (1 === $_SESSION['logged']) {
    //Filename to read could be given like ?file=invoice.pdf
    $file = $_GET['file'];
    //Warning: you should sanitize the $file to prevent an attacker to give a file like "../src/yourclass.php".
    echo file_get_contents(__DIR__.'/../private/'$file);
}

有关{em> Deny 的信息,请参见Apache documentation