Аутентификаци на JavaScript
Правильно это или нет? И вообще - как делается аутентификация 404 на JavaScript?
У меня такая проблема. Есть форма, в которой есть поле, которое заливает файл на сервер, т.е. <input type=file>. Нужно сделать так, чтобы при нажатии на кнопку "Browse" выскакивал диалог аутентификации, и если она проходила файл заливался. У меня только одна идея возникла: влепить в форму OnClick: document.open("auth.htm"). В auth.htm будет аутентификация, если она проходит нормально, файл заливается.
Правильно это или нет? И вообще - как делается аутентификация 404 на JavaScript?
Если ты имеешь ввиду создание окошка с проверкой имени и пароля, то, мне какжется, на JS это реализовывать было бы безсмысленным, т.к. JS обрабатывается на стороне клиента, а значит он получает исходный код. Я вообще слышал о функции, которая создает хэш-код заданной переменной. Можно через это попробовать. Тобишь хранишь в скрипте переменную с хэш-кодом пароля пользователя, и хэш-кодируешь пароль, введенный пользователем, если эти коды совпадают, то подтверждаешь аутиентификацию. Хэш кодировщиков довольно много, я точно не знаю какие из них в JS реализованы, но вроде бы алгоритм md5 там был и, на сколько я знаю, этот алгоритм не производит декодирования хэш-кода, так что как бы вроде бы это было бы безопасно, даже если хэш-код пароля получит злоумышленник. Только вот проблемно будет постоянно обновлять список пользователей сайта и их пароли в самом скрипте. Помоему эту задачу лучше было бы на PHP реализровать. И проще и безопаснее, да и логичнее.
Помоему эту задачу лучше было бы на PHP реализровать. И проще и безопаснее, да и логичнее.
На PHP было бы даже лучше. Я вот только не могу понять как заставить выскакивать окошко аутентификации в момент нажатия на клавишу Browse.
В JS есть событие OnClick. Каков аналог в PHP?
На PHP было бы даже лучше. Я вот только не могу понять как заставить выскакивать окошко аутентификации в момент нажатия на клавишу Browse.
В JS есть событие OnClick. Каков аналог в PHP?
А в PHP его и нет. PHP только генерирует web-страничку, а не обрабатывает ее события. Для этого используй как раз JS, а еще лучше формы. Проще будет.
<body>
<FORM ENCTYPE="multipart/form-data" ACTION="upload2.php" METHOD=POST>
Выберете файл: <INPUT NAME="myfile" TYPE="file">
<INPUT TYPE="submit" VALUE="Загрузить">
</FORM>
</body>
</html>
<?php
$dir="c:\\temp\\up\\";
//header('WWW-Authenticate: Basic realm="Test"');
//header('HTTP/1.0 401 Unauthorized');
//exit;
if((!isset($PHP_AUTH_USER))||(!isset($PHP_AUTH_PW))||($PHP_AUTH_USER!='login')||($PHP_AUTH_PW!='pass')){
header('WWW-Authenticate: Basic realm="Test"');
header('HTTP/1.0 401 Unauthorized');
print("You are sucker!!");
exit;
}else{
// Загрузка файлов на сервер
// Если register_globals=On
print("Имя файла на нашем сервере (во время запроса): ".$myfile."
");
print("Имя файла на компьютере пользователя: ".$myfile_name."
");
print("MIME-тип файла: ".$myfile_type."
");
print("Размер файла: ".$myfile_size."
");
copy($myfile,"$dir".$myfile_name);
}
?>
Но он не работает, орет "Warning: Cannot modify header information - headers already sent by (output started at C:\inetpub\wwwroot\test\upload2.php:9) in C:\inetpub\wwwroot\test\upload2.php on line 16
Warning: Cannot modify header information - headers already sent by (output started at C:\inetpub\wwwroot\test\upload2.php:9) in C:\inetpub\wwwroot\test\upload2.php on line 17"
Т.е. header уже установлен, и другой он утсановить не хочет. Но не понятно, почему он сразу хочет установить заголовок и этот? Может нужно флаг какой-нибудь засадить?
Т.е. header уже установлен, и другой он утсановить не хочет. Но не понятно, почему он сразу хочет установить заголовок и этот? Может нужно флаг какой-нибудь засадить?
это потому что php сценарий отправляет заголовки до вывода информации на стандартный поток вывода... поэтому, заголовки нужно отправлять до того как ты выводишь html или выполняешь inckude или require.
а по сути вопроса, то ИМХО отследить нажатие кнопки browse с html страницы не представляется возможным, потому что эта нопка не является отдельным элементом формы, следовательно никакие обработчики скорее всего не передаются системе.... мне кажеться что такой механизм, как нужно тебе нужно писать на ActiveX.... Но это мое личное мнение!
а по сути вопроса, то ИМХО отследить нажатие кнопки browse с html страницы не представляется возможным, потому что эта нопка не является отдельным элементом формы, следовательно никакие обработчики скорее всего не передаются системе.... мне кажеться что такой механизм, как нужно тебе нужно писать на ActiveX.... Но это мое личное мнение!
Я тоже пришел к такому же мнению. Поэтому задача изменилась - окошко вылетает по клику на кнопку "Отправить". Т.е. сначала выбрал файл ("Browse"), потом нажимешь "Отправить" и вылетатет окошко. Если логин и пароль совпадают, то файл закачивается на сервер, если нет, то пишется чего-нибудь матерное. Но как это сделать, если header можно выводить только до html???
Я тоже пришел к такому же мнению. Поэтому задача изменилась - окошко вылетает по клику на кнопку "Отправить". Т.е. сначала выбрал файл ("Browse"), потом нажимешь "Отправить" и вылетатет окошко. Если логин и пароль совпадают, то файл закачивается на сервер, если нет, то пишется чего-нибудь матерное. Но как это сделать, если header можно выводить только до html???
а так и делай! нажимаешь submit, управление передается другому скрипту. в нем до обработки входного потока отправляешь заголовки нужные, потом, после прохождения аутентификации, продолжаешь обрабатывать входные данные.
а так и делай! нажимаешь submit, управление передается другому скрипту. в нем до обработки входного потока отправляешь заголовки нужные, потом, после прохождения аутентификации, продолжаешь обрабатывать входные данные.
ОК. Я разнес в два разных скрипта. Но!!! Теперь он не проходит аутентификацию. Т.е. я ввожу правильный логин и пароль, это повторяется три раза, и потом вылетает сообщение об ошибке.
Что не правильно здесь:
header('WWW-Authenticate: Basic realm="Test"');
header('HTTP/1.0 401 Unauthorized');
Парль и Логин жестко зашиты в код....что не так???
пример из мануала:
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "
Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "
You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
?>
Указанные вами учетные сведения не позволяют просматривать данный каталог или страницу.
Попробуйте выполнить следующее:
* Нажмите кнопку Обновить, чтобы использовать другие учетные сведения.
* Если вы уверены, что должны иметь доступ к данному каталогу или странице, обратитесь к администратору веб-узла по электронной почте или по телефону, указанному на localhost домашней странице.
Ошибка HTTP 401.5 - Отсутствуют необходимые права доступа: доступ запрещен приложением ISAPI/CGI
Internet Information Services
Технические сведения (для сотрудников службы поддержки)
* Общая информация:
По указанному вами адресу на веб-сервере установлено приложение ISAPI или CGI, проверяющее правильность указания учетных сведений. Это приложение запретило подключение к серверу по указанным учетным сведениям.
Надо думать, что это IIS теперь чего-то орет!!! Где посмотреть на эти блокирующие фильтры? И какой именно может заблокировать?
а ну дык епт все понятно: чтобы пользоваться встроенной аутентификацией пхп должен быть установлен как модуль... если как cgi то она не работает!
Точно!!Загвоздка была в этом. Теперь вызывается окошко с аутентификацией!!! Ура!!! Все бы хорошо, если бы не одно НО! Я модифицировал скрипт из мануала вшив в него пароль и логин, вот он:
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "
Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "
You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
Аутентификация не проходит!!! Почему? Ведь все правильно!!!