Защита на директория чрез .htaccess

proba

Registered
Не съм сигурен дали темата е за правилният раздел, но ако не е се извинявам.

Интересувам се, как чрез .htaccess да огранича достъпа до дадена директория (която съдържа файлове), но същевременно те да могат да се свалят чрез header и readfile , т.е.

PHP:
if (isset($_GET['page']) and $_GET['page'] == "download_archive")
{
$ip = $_SERVER['REMOTE_ADDR'];
$dir = "encoded/$ip/";
$file = htmlspecialchars($_GET['file']);
if (isset($file) and file_exists($dir.$file))
{
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename='.basename($dir.$file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($dir.$file));
ob_clean();
flush();
if (readfile($dir.$file))
{
if (unlink($dir.$file))
{
header('Location: index.php');
}
}
exit;
}
}

Този код да продължи да ми работи но ако се опита някой да влезне в директория encoded/ (както и директориите които са в нея), директория decoded/ и директория tmp/ ?

Как би могъл да се ограничи достъпът до тези директории, поддиректориите им и до файловете в тях ?
 
Сега ще ти покажа неща, който може да направиш, чрез PHP.

Може да се направи, като се дефинира една константа или просто обикновена променлива във файла, който инклудва този файла, който искаш да защитиш и правиш проверка в него.

Пример:

root:
web_sait/index.php

PHP:
<?php
define("CHECK", "true");

include ('folder/my_file.php');

{//kod}

?>


root:
web_sait/folder/my_file.php

PHP:
<?php

if (!defined('CHECK')) {
echo 'You have no permission to enter';    
exit;
}

{//kod}

?>


Така файла ще се отваря само от index.php, защото само той има дефинирана константа "Check", ако се опиташ да го отвориш ръчно ще ти изпише грешката, защото нямаш дефинирана константа.


-------------

Друго във папката "folder" си правиш един файла "index.php".

В него слагаш:
PHP:
<?php
header('Location: ../index.php');
exit;
?>

Така ако някой се опита да достъпи папката като напише нейното име, той веднага ще зареди index.php и ще прапрати една директория на зад към главния файла на системата (в случая съм направил index.php да е).


-------------


Това са някой от неща, който може да направиш чрез PHP.
 
Не, нямам това в предвид.
А отново това с дефинирането не го използвам, а си използвам това:

test.php
PHP:
<?php
$access = "granted";
include_once "file.php';
?>

file.php
PHP:
<?php
if ($access == "granted")
{
echo "ok";
}
else
{
echo "error";
}
?>

Но не това ми трябва.
Трябва ми нещо от типът на

DENY FROM ALL

Става въпрос че в папката encoded, decoded, tmp има файлове от вид rar, zip, mp3 и т.н.
Идеята е да не могат да се свалят директно през http://site.com/encoded/file.rar (примерно)
а да става само чрез
index.php?page=download_archive&file=file.rar
Самото сваляне съм направил, но как да огранича достъпът ако някой се опита да свали файлът директно от http://site.com/encoded/file.rar ?
 
Ето тук има информация:

http://stackoverflow.com/questions/7127153/php-how-can-i-block-direct-url-access-to-a-file-but-still-allow-it-to-be-downl



EDIT:

Втория писал, прочети какво казва, да сложиш папката извън сървърната папка (htdocs, www или webroot). Само да бъде достъпна от PHP.
 
Ти отново не ме разбра.
Не ми трябва php код , него съм си написал и той си работи
Толкова ли е сложно да разбереш какво искам да направя :D

Искам когато влезна в

http://site.com/encoded/
http://site.com/decoded/
http://site.com/tmp/

и опитам да сваля файл

http://site.com/encoded/file.rar
http://site.com/encoded/file.mp3
http://site.com/encoded/file.zip

Да връща

Access forbidden!

You don't have permission to access the requested directory. There is either no index document or the directory is read-protected.

If you think this is a server error, please contact the webmaster.

Error 403

localhost
Apache/2.4.2 (Win32) OpenSSL/1.0.1c PHP/5.4.4

т.е. да има .htaccess
с код

DENY FROM ALL
Само че с DENY FROM ALL файловете пак не могат да се свалят.

EDIT:
мислех , че с DENY FROM ALL няма да могат да се свалят, но се оказа че всъщност php скрипта си работи тъй като той си ги чете от директорията а не от уеб браузъра.

Явно не е имало смисъл да пиша тема ,а е трябвало първо да пробвам, но си мислех че кодът за .htaccess-a ще е някакъв по-специален..

Извинявам се за спама и @admin може да изтрие темата ако прецени ;)
 
Много добре те разбрах, след като написа втория пост и ти пратих линк, в който е обяснено всичко как ще стане със .httaccses и също така как ще стане като сложиш файловете извън уеб директорията.
 

Back
Горе