Автор Тема: Чтение файла из закрытой зоны без ввода логина и пароля пользователем  (Прочитано 5796 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн KiraSin

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Люди! Помогите!
Проблема:
Есть зарытая папка содержащие файлы. Доступ ограничен через .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";
« Последнее редактирование: 12 Мая 2007, 18:28:01 от KiraSin »

Оффлайн new_coder

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 33
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
встречаем

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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Это простой способ авторизации через сессию.
Авторизацию я и так проверяю
Меня больше волнует вопрос - как достучаться до файла, если он лежит в закрытой папке .htaccess\'ом!
Вот этот путь закрыт:

$path_file 
"/YOU_FILE"

и файл, этот скрипт, не получит! Пока не введешь логин и пароль в форму авторизации .htaccess
Т.е. пользователь не знает внутреннего логина и пароля, он знает только свой и авторизацию уже прошел
Если я дам ему внутренний логин и пароль он получит доступ ко всем файлам в папке, а мне надо чтобы он мог получить доступ только через мой скрипт и ни как иначе.
Т.е. авторизация и контроль доступа у меня уже есть.
Надо просто выдать файл из запароленной области так чтобы пользователь не увидель реального пути и не нужно было вводить пароль доступа к папке.
Вот такая вроде бы простая и, как мне кажется, эффективная защита, которая вроде бы как должна легко реализовываться, но почему-то работать не хочет.
« Последнее редактирование: 12 Мая 2007, 18:28:51 от KiraSin »

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
KiraSin
Цитировать
KiraSin:
файл этот скрипт не получит!

Ерунду говорите.
LJ: Backslashed life (rss)

Оффлайн KiraSin

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Цитировать
Ерунду говорите.

Не вижу где передается логин и пароль для достпуа к файлу

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
KiraSin
Та-а-к.
Мы тут вообще про один хост говорим, или про два разных?

Со своего хоста забрать файл можно элементарно и htaccess тут ни при чем.
С чужого - поднимать http-сессию с авторизацией, сливать к себе и отдавать. Но это задача из серии "вы не должны этого хотеть", поскольку явно неверно построен кейс.
LJ: Backslashed life (rss)

Оффлайн KiraSin

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
CGVictor
Объясните.
Хост мой. Объясни как можно со своего хоста забрать файл и отдать его через скрипт из закрытой зоны через ататчмент. Т.е. чтобы пользователь не видел реального линка, не вводил логин и пароль которые указаны в .htaccess.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
KiraSin
Если всё происходит на одном и том же хосте - тогда знайте: правила .htaccess не распространяются на действия самого скрипта. Директория ./files может иметь в .htaccess вообще deny all, но это не помешает скрипту получить оттуда файл при помощи функций чтения с диска. И отдать его пользователю "от своего имени".

Вот, собственно, и всё. В общем случае код от new_coder должен работать.
LJ: Backslashed life (rss)

Оффлайн KiraSin

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
CGVictor
Получилось все что хотел. Действительно не надо никаких паролей. Просто путь надо указывать локальный, а не внешний (т.е. без http...)
Спасибо всем за помощь.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28