[英]Secure file storage in a server
我有一个求职网站,所以有很多简历上传到服务器并存储在公用的文件夹中。 我只是想知道我可以在Apache,php级别执行哪些安全措施,以阻止未经授权的人员访问其他人的简历。
我有
..等等
只是想知道是否有一种方法可以完全隐藏出现在浏览器URL中的文件名(可能带有诸如application / pdf ..etc之类的标题并即时读取文件的内容)是否可行?像将它们存储在MySQL DB中一样?
将文件存储在文档根目录之外(因此服务器默认不会将URL映射到该文件根目录),并使用脚本来确认经过身份验证的用户,然后仅将简历的内容流式传输给该用户。
例如...
<?php
session_start();
include 'app.php';
$userAuthenticated = (new Auth)->check($_SESSION['username']);
$file = isset($_GET['file']) ?
$_GET['file'] :
FALSE;
$file = FILES_PATH . DIRECTORY_SEPARATOR . preg_replace('/[^\w.]/', '', $file);
if ($userAuthenticated AND file_exists($file)) {
readfile($file);
} else {
header('HTTP/1.1 403 Forbidden');
echo 'You\'re not authenticated!';
}
这段代码应该给您大致的想法。
切勿在docroot中允许用户上传文件。 这是非常不安全的,因为您要托管其他人提供的内容。
切勿使用用户提供的名称存储用户上传的文件。 想象一下,如果有人上传了somescript.php,您将其命名为这样,并将其保存在docroot中。 任何人都可以执行。
将文件存储在docroot之外,将文件的详细信息(原始名称,mime类型等)保留在数据库中,并使用脚本使用readfile()
或类似文件访问它们。 只允许应该访问的用户访问这些文件。
您可以使用.htaccess重写。
在php中,使用标头和readfile()函数,将文件ID更改并存储在mysql db中,然后确保从.htaccess中的所有文件拒绝上传目录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.