Программирование > PHP
Чтение файла из закрытой зоны без ввода логина и пароля пользователем
KiraSin:
Люди! Помогите!
Проблема:
Есть зарытая папка содержащие файлы. Доступ ограничен через .htaccess
Человек может получить доступ только в определнном случае, и только к определенному файлу.
Прямой линк работать не должен (в связи с этим файлы закрыты для всех .htaccess - ом)
Как мне дать нужный файл пользователю, логин и пароль указанный в .htaccess будет один для всех - он все равно явно не светится, а если кому-то надо будет непременно ломануть и так ломанут.
Вот надыбал такой код, к сожалению пишет - "I can\'t connect!"
define (\'x401_host\', \'http://site.com\');
define (\'x401_port\', 80);
define (\'x401_user\', \'user_login\');
define (\'x401_pass\', \'user_pass\');
/* Function */
function get401Page($file) {
$out = "GET $file HTTP/1.1\\r\\n";
$out .= "Host: ".x401_host."t\\r\\n";
$out .= "Connection: Close\\r\\n";
$out .= "Authorization: Basic ".base64_encode(x401_user.":".x401_pass)."\\r\\n";
$out .= "\\r\\n";
if (!$conex = @fsockopen(x401_host, x401_port, $errno, $errstr, 10))
return 0;
fwrite($conex, $out);
$data = \'\';
while (!feof($conex)) {
$data .= fgets($conex, 512);
}
fclose($conex);
return $data;
}
header(\'Content-type: audio/mpeg\');
$localfilename = "http://site.com/path/full/".$file_name.".mp3";
header(\'Content-Disposition: attachment; filename="\'.$file_name.\'.mp3"\');
/* Code */
if ($source = get401Page($localfilename)) {
echo $source;
} else {
echo "I can\'t connect!";
}
Логин и пароль 100% указаны правильно - через прямую ссылку с вводом в окне авторизации файл получаю.
С путями тоже игрался, возможно и в них проблема, тогда подскажите как правильно путь указать
"http://site.com/path/full/".$file_name.".mp3";
"/path/full/".$file_name.".mp3";
и даже так:
"http://user_login:user_pass@site.com/sound/full/".$file_name.".mp3";
new_coder:
встречаем
echo "
<form action=\'".__YOU_SCRIPT."\' method=post>
<input type=hidden name=\'action\' value=\'aut\'>
<table>
<tr>
<td>
ID
</td>
<td>
<input type=text name=\'login\'>
</td>
</tr>
<tr>
<tr>
<td>
пароль
</td>
<td>
<input type=password name=\'pass\'>
</td>
</tr>
<tr>
<td align=center colspan=2>
<input type=submit value=\'Войти\'></form>
</td>
</tr>
</table>
</form>";
if( $_REQUEST[\'action\'] === \'aut\')
{
$login = $_REQUEST[\'login\'];
$pass = $_REQUEST[\'pass\'];
if(($login === \'YOU_login\') && ($pass === \'YOU_pass\'))
{
session_name(\'SESNAME\');
session_start();
$_SESSION[\'authorized\'] = 1;
header("Location: ".__DOWN_SCRIPT);
}
}
отдаем файл
if(isset($_REQUEST[\'SESNAME\']))
{
session_name(\'SESNAME\');
session_start();
if( (isset($_SESSION[\'authorized\'])) && ($_SESSION[\'authorized\'] === 1) )
{
$path_file = "/YOU_FILE";
if(is_readable($path_file))
{
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s")." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Content-Type: application/force-download\\r\\n");
header("Content-Transfer-Encoding: binary\\r\\n");
header("Content-Length: ".(filesize($path_file))."\\r\\n");
header("Content-Disposition: attachment; filename=".basename($path_file)."\\r\\n");
readfile($path_file);
}
else
{
die("error");
}
}
else
{
die("need auth");
}
}
KiraSin:
Это простой способ авторизации через сессию.
Авторизацию я и так проверяю
Меня больше волнует вопрос - как достучаться до файла, если он лежит в закрытой папке .htaccess\'ом!
Вот этот путь закрыт:
$path_file = "/YOU_FILE";
и файл, этот скрипт, не получит! Пока не введешь логин и пароль в форму авторизации .htaccess
Т.е. пользователь не знает внутреннего логина и пароля, он знает только свой и авторизацию уже прошел
Если я дам ему внутренний логин и пароль он получит доступ ко всем файлам в папке, а мне надо чтобы он мог получить доступ только через мой скрипт и ни как иначе.
Т.е. авторизация и контроль доступа у меня уже есть.
Надо просто выдать файл из запароленной области так чтобы пользователь не увидель реального пути и не нужно было вводить пароль доступа к папке.
Вот такая вроде бы простая и, как мне кажется, эффективная защита, которая вроде бы как должна легко реализовываться, но почему-то работать не хочет.
CGVictor:
KiraSin
--- Цитировать ---KiraSin:
файл этот скрипт не получит!
--- Конец цитаты ---
Ерунду говорите.
KiraSin:
--- Цитировать ---Ерунду говорите.
--- Конец цитаты ---
Не вижу где передается логин и пароль для достпуа к файлу
Навигация
Перейти к полной версии