我想建立一个文件夹中包含受保护数据的网站。我在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>
但是,即使用户登录,此脚本也会拒绝我的所有文件。
答案 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。