за да влезете в сайта, се изпраща loginForm (POST) към скрипта login.php.
Mysql се запитва и ако потребителското име/md5 pw съвпадат, тогава се задават няколко променливи $_SESSION.
Потребителят се пренасочва към защитена страница с помощта на header('Location: securedLinks.php').
На securedLinks.php проверявам за променливите $_SESSION, използвайки if (ISSET($_SESSION)){}.
Това работи, ако потребителят е удостоверен, тогава той може да кликне върху връзките за достъп до файлове. Връзките са на securedLinks.php, така: http://mysite/files/link1.pdf
Ако копирате връзката от securedLinks.php и след това отворите нов браузър, можете да навигирате директно до връзката, без да се налага да преминавате през securedLinks.php.
Какъв е методът за защита на директорията mysite/files? Това направено ли е на ниво уеб сървър, apache2 с помощта на директиви?
Благодаря
Редактиране - Решение
конфигурация на apache2 virtualServer:
<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='/bgreportLoader.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);
}
}