要登录该站点,将loginForm提交(POST)到login.php脚本。
查询Mysql,如果用户名/ md5 pw匹配,则设置一些$ _SESSION变量。
使用标题(“位置:securedLinks.php”)将用户重定向到安全页面。
在securedLinks.php上,我使用if(ISSET($ _ SESSION)){}检查$ _SESSION变量。
这是有效的,如果用户通过身份验证,那么他们可以单击链接来访问文件。这些链接位于securedLinks.php上,如下所示:http://mysite/files/link1.pdf
如果您从securedLinks.php复制链接然后打开一个新浏览器,您可以直接导航到该链接,无需通过securedLinks.php。
保护mysite / files目录的方法是什么?这是在Web服务器层上完成的,apache2使用指令吗?
由于
修改 - 解决方案
apache2 virtualServer config:
<Directory "/something/path/securedDirectory">
Options -Indexes
Order Deny,Allow
Deny from all
</Directory>
securedLinks.php返回文件列表
$fileList = scandir($securedDirectory);
jQuery遍历$ fileList,添加了到securedLinks.php的链接
$.each(linkObj, function(k,v){
var a = "<a href='reportLoader.php?fileName=" + v + "'>" + v + "</a><br>";
$("#reportLinks").append(a);
});
jQuery也会停止默认点击并删除href,然后设置下载
$(document).on("click", "#reportLinks a", function(e){
e.preventDefault();
var params = $(this).attr("href");
getPdf(params);
});
function getPdf(urlParams){
if (urlParams.length > 0){
window.location.href = urlParams;
}
}
最后,这是reportLoader.php如何流式传输文件
session_start();
if (isset($_SESSION['myVar'])) {
$fileName = $_REQUEST['fileName'];
$fullPath = $_SERVER['DOCUMENT_ROOT']."/securedDirectory/".$fileName;
if ($fd = fopen ($fullPath, "r")) {
$fsize = filesize($fullPath);
$path_parts = pathinfo($fullPath);
$ext = strtolower($path_parts["extension"]);
switch ($ext) {
case "pdf":
header("Content-type: application/pdf");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "doc":
header("Content-type: application/msword");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
case "docx":
header("Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document");
header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\"");
break;
}
header("Content-length: $fsize");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); //this is incompatible with IE8
header("Content-Transfer-Encoding: Binary");
readfile("$fullPath");
fclose ($fd);
}
}
答案 0 :(得分:0)
通常,如果要将目录设为私有,则可以使用apache使用.htaccess文件限制目录,或者将目录上的权限设置为仅apache。这样就无法获得外部访问,然后当您需要这些文件时,apache可以在一个对用户安全的特定页面上为您提供服务。所以在脚本securedLinks.php上,apache可以访问这些文件,因此该目录可以为用户提供服务以供查看。