Forum Webscript.Ru
Программирование => PHP => Тема начата: я... от 23 Августа 2002, 10:36:17
-
Доброго времени суток, уважаемые коллеги...
Ситуация:
есть некая папка/страница запароленная .htaccess\'ом, есть форма через которую пользователь должен попасть на эту страницу, не вводя в http auth\'е пароль, а введя в форме...
Как делаю:
после ввода данных перенаправляю пользователя таким образом:
header("Location: http://".$login.":".$passwd."@host/path");
где $login, $passwd, host - ясно что, а path - путь к запароленной папке/странице...
Проблемы:
IE 4.0 после заполнения формы выводит далоговое окно http auth... Если после отмены обновить страницу - все в порядке...
Opera 6.0 вообще идиотизм, говорит, что сервер "login" (ну тот, который ввели) не найден...
NN4.79 говорит тоже самое, что и Опера...
Вопрос:
Не посчитайте за дурака(извращенца, ламера, etc), но очень надо...
Может кто сталкивался?..
:insane:
-
хрен тебе.
за извращенца посчитаем.
сталкивался. много раз. Не лечится.
Весь просвещенный мир давным давно авторизует сессиями.
Даже я!
Если бы все было так просто, сессии были бы не нужны нафиг.
-
Жаль...
переделывать все надо... а не хотел...
ну лана, спасибо...
-
собственно, я тебе поясню проблему.
Таких локейшенов - логин:пассворд - не бывает в природе.
в протоколе НТТР не описаны.
Это всего лишь удобная форма ввода, из которой броузер формирует стандартный НТТР заголовок авторизации.
соответственно при ручном вводе оно никуда дальше бровзера не уходит.
остальное становится понятным.
-
броузер формирует стандартный НТТР заголовок авторизации.
я... а может самому сформировать header\'ом поможет.
-
Alexandr
да, я думал на эту тему...
стоит попытаться...
спасибо за совет!
-
ребята, а теперь берем букварь и идем в первый класс.
Читаем.
функция header служит для отсылки серверных НТТР запросов бровзеру
лог ин и пароль же, идут от в обратном направлении. бровзера к серверу.
И заставить бровзер посылать какие бы то ни было заголовки, вы, слава аллаху, не можете.
-
уфф!... забрал из закрытой папки страницу таким образом:
$host=\'www.www.www\';
$path=\'/closed/\';
$fp = fsockopen ($host,80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)";
}
else
{
fputs ($fp, "GET http://".$login.":".$passwd."@".$host.$path." HTTP/1.1\\r\\nHost: ".$host."\\r\\n\\r\\n");
fpassthru($fp);
}
спецификация, спецификация...
все-равно спасибо! =)))
-
я это был... подписаться забыл просто...
2 тов. Ромик:
правила существуют, чтобы их нарушать =)
зы: как я рад...
:beer:
-
правила существуют, чтобы их нарушать
Точно.
вы, слава аллаху, не можете.
Тов. RomikChef отдыхает.
-
я, напиши, как у тебя будет работать, когда в каталоге "клозет" больше одной страницы появится.
Вместе посмеемся.
Не забудь у всех ссылок исправить пути на абсолютные.
Сашок, а ты так и не понял, о чем речь.
а туда же - тявкать.
-
Ну, указанный тов. именно в этом высказывании как раз не отдыхает, т.к. дело совсем не в этом...
А вот насчет рабочести приведенного кода - интересный вопрос: а какой там сервер (на домене http://www.www.www). потому как мне повторить эксперимент на апаче не удалось. Причем что интересно, так не разругалость на http://.... после GET (хотя я всегда думал, что там только path должен и может быть), а всего-навсего не пустило, сказав authorization required.
-
не, даже не так.
уже будет смешно, если на запрашиваемой странице есть хотя бы одна картинка.
А эксперимент мне не удался тоже.
-
Что самое интересное, для незащищенного каталога у меня такой вариант сработал - в смысле со всей пургой перед path\'ом. Что, спецификация http такое формально разрешает?
-
про пути согласен...
НО!
вы говорили:
И заставить бровзер посылать какие бы то ни было заголовк
я же говорил не только про ф-цию header =(((
это действительно не совсем то, что я хотел в своем первом мессадже, но все работает:
для теста:
http://www.mxm.ru/4u/
если хотите удостоверится, что дирректория действ. защищена:
http://www.mxm.ru/4u/test/
сервер Apache/1.3.26
ps а вообще жаль, что сразу наезжать =(((
-
я..., молодец. Добился своего.
а вообще жаль, что сразу наезжать
Вернят.
[OFF]И всё же тов. RomikChef отдыхает. гыгыгы[/OFF]
-
Весь просвещенный мир давным давно авторизует сессиями.
Даже я!
Без комментариев :D
.htaccess понадежнее сессий будет... От дырок в пхп и от ошибок в скрипте никто не застрахован.
А если поместить скрипт в запороленную директорию, то его и запустить хакер не сможет - прийдется ломать сервер или подбирать пароль.
-
Alexandr
И всё же тов. RomikChef отдыхает. гыгыгы
Вы даже не разобравшись, что он писал, и, судя по всему, не поняв, как работает приведенный пример, пытаетесь осмеять того, кто это все знает и понимает...
-
Ardzhan
Все верно.
Вопрос в выборе между уровнем надежности и удобством пользователя.
И стстистика, прямо скажем, не в пользу .htaccess
К тому же, у него есть один небольшой недостаток. Он, теоретически, более уязвим для сниффинга, поскольку логин и пароль передаются открыто при каждом обращении к серверу.
Так что, если хотите реальной защиты - работайте через SSL.
-
я...
Покажи место, где я на тебя наезжаю?
Или я виноват в том, что передо мной не стоит твоя проблема и знаю я о ней ровно столько, сколько ты здесь написал? Я пишу что можно, а что нельзя по технологии. На нее обижайся.
Unregistered
У меня не получается ни на своем сервере повторить, ни к mxm.ru обратиться.
Но, в общем-то, формат записи - не проблема. Можно и по всем правилам заголовок составить.
Но проблема в том, что на странице может быть только текст - никаких ссылок на защищенный каталог, никаких картинок из него же, никаких форм. Т.е. полезность данного метода является очень сомнительной.
-
Вот рабочий код
$host=\'www.mxm.ru\';
$path=\'/4u/test/\';
$login="test";
$password="test1";
$header="GET $path HTTP/1.1\\r\\n";
$header.="Host: $host\\r\\n";
$header.="Authorization: Basic ".base64_encode("$login:$password")."\\r\\n";
$header.="\\r\\n";
$fp = fsockopen ($host,80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)";
}
else
{
fputs ($fp, $header);
fpassthru($fp);
}
-
Вообщем, хорош дискутировать.
Элементарно: (забываем на 1сек. про PHP)
-
javascript
Слитно. Эт форум шалит.
-
О! Вариант.
В данной ситуации, похоже - наиболее подходящий, решает все проблемы.
Поздравляю.
Могу только добавить, что если смущает яваскрипт можно перенаправить метой.
И что можно скрыть логин и пароль из урла, просто перезагрузив страницу.
-
Вот рабочий код
наверное я все-тки ламер, но он не работает апач выдает:
HTTP/1.0 400 Bad Request Expires: Thu, 01 Jan 1970 00:00:01 GMT Content-Type: text/html Invalid request or URL: Bad request format
а с javascript\'ом в опере такая-же бяка, как и в первом варианте... =((((
[OFF]я в шоке...[/OFF]
[OFF]Покажи место, где я на тебя наезжаю?
сорри, нервы просто...
[/OFF]
таак...
вот мой вариант:
http://www.mxm.ru/4u/index.php
вот вариант Alexandr с javascript:
http://www.mxm.ru/4u/index2.php
вот вариант RomikChef:
http://www.mxm.ru/4u/index3.php
ладно, буду ещё сильнее извращаться....
Спасибо всем!
-
Итак, IE 6.0.
Первый вариант:
HTTP/1.1 200 OK Date: Mon, 26 Aug 2002 09:10:28 GMT Server: Apache/1.3.26 (Unix) mod_perl/1.26 PHP/4.2.2 AuthMySQL/2.20 X-Powered-By: PHP/4.2.2 Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=windows-1251 d приветик =))) 0
Второй вариант - усе пучком
Третий вариант:
HTTP/1.0 400 Bad Request Expires: Thu, 01 Jan 1970 00:00:01 GMT Content-Type: text/html Invalid request or URL: Bad request format
-
там наверное надо написать 1.0 вместо 1.1
Хотя это никому не поможет.
Так, для информации просто.