我想建立一个网站,在一个文件夹中使用受保护的数据。我在我的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>
但是即使用户登录,此脚本也会拒绝我的所有文件。
这个想法是将您的文件放在外部不可用的目录中。假设您有以下目录结构:
|_src
_.htaccess
|_private
_.htaccess
|_public
_read.php
src/:包含您的类,源代码。
private/:包含您的 JPG 和 PDF 文件。
public/:包含您的前端控制器,这是互联网上唯一可用的直接控制器。
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
这样做只能从互联网访问公共/目录。在您的 public/ 目录中,您可能有一个读取这些文件的 PHP 文件。这里有一个小例子。
公共/读取.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);
}
请参阅有关 Deny 的 Apache 文档。