Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Аутентификаци на JavaScript

382
05 февраля 2004 года
dodger
164 / / 07.02.2003
У меня такая проблема. Есть форма, в которой есть поле, которое заливает файл на сервер, т.е. <input type=file>. Нужно сделать так, чтобы при нажатии на кнопку "Browse" выскакивал диалог аутентификации, и если она проходила файл заливался. У меня только одна идея возникла: влепить в форму OnClick: document.open("auth.htm"). В auth.htm будет аутентификация, если она проходит нормально, файл заливается.
Правильно это или нет? И вообще - как делается аутентификация 404 на JavaScript?
365
05 февраля 2004 года
MasterSID
230 / / 23.02.2003
Цитата:
Originally posted by dodger
У меня такая проблема. Есть форма, в которой есть поле, которое заливает файл на сервер, т.е. <input type=file>. Нужно сделать так, чтобы при нажатии на кнопку "Browse" выскакивал диалог аутентификации, и если она проходила файл заливался. У меня только одна идея возникла: влепить в форму OnClick: document.open("auth.htm"). В auth.htm будет аутентификация, если она проходит нормально, файл заливается.
Правильно это или нет? И вообще - как делается аутентификация 404 на JavaScript?



Если ты имеешь ввиду создание окошка с проверкой имени и пароля, то, мне какжется, на JS это реализовывать было бы безсмысленным, т.к. JS обрабатывается на стороне клиента, а значит он получает исходный код. Я вообще слышал о функции, которая создает хэш-код заданной переменной. Можно через это попробовать. Тобишь хранишь в скрипте переменную с хэш-кодом пароля пользователя, и хэш-кодируешь пароль, введенный пользователем, если эти коды совпадают, то подтверждаешь аутиентификацию. Хэш кодировщиков довольно много, я точно не знаю какие из них в JS реализованы, но вроде бы алгоритм md5 там был и, на сколько я знаю, этот алгоритм не производит декодирования хэш-кода, так что как бы вроде бы это было бы безопасно, даже если хэш-код пароля получит злоумышленник. Только вот проблемно будет постоянно обновлять список пользователей сайта и их пароли в самом скрипте. Помоему эту задачу лучше было бы на PHP реализровать. И проще и безопаснее, да и логичнее.

382
05 февраля 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by MasterSID

Помоему эту задачу лучше было бы на PHP реализровать. И проще и безопаснее, да и логичнее.


На PHP было бы даже лучше. Я вот только не могу понять как заставить выскакивать окошко аутентификации в момент нажатия на клавишу Browse.
В JS есть событие OnClick. Каков аналог в PHP?

365
05 февраля 2004 года
MasterSID
230 / / 23.02.2003
Цитата:
Originally posted by dodger

На PHP было бы даже лучше. Я вот только не могу понять как заставить выскакивать окошко аутентификации в момент нажатия на клавишу Browse.
В JS есть событие OnClick. Каков аналог в PHP?


А в PHP его и нет. PHP только генерирует web-страничку, а не обрабатывает ее события. Для этого используй как раз JS, а еще лучше формы. Проще будет.

365
05 февраля 2004 года
MasterSID
230 / / 23.02.2003
в смысле не окошко при событии onclick а формы и кнопку submit. В итоге скрипт, указанный в теге form параметром action получит все поля формы ввиде переменных с именами теми же что и имена полей формы.
382
06 февраля 2004 года
dodger
164 / / 07.02.2003
Вот, что я наваял:
Код:
<html>
<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 уже установлен, и другой он утсановить не хочет. Но не понятно, почему он сразу хочет установить заголовок и этот? Может нужно флаг какой-нибудь засадить?
437
06 февраля 2004 года
Lsd[52r]
106 / / 20.12.1999
Цитата:
Originally posted by dodger
Т.е. header уже установлен, и другой он утсановить не хочет. Но не понятно, почему он сразу хочет установить заголовок и этот? Может нужно флаг какой-нибудь засадить?



это потому что php сценарий отправляет заголовки до вывода информации на стандартный поток вывода... поэтому, заголовки нужно отправлять до того как ты выводишь html или выполняешь inckude или require.

а по сути вопроса, то ИМХО отследить нажатие кнопки browse с html страницы не представляется возможным, потому что эта нопка не является отдельным элементом формы, следовательно никакие обработчики скорее всего не передаются системе.... мне кажеться что такой механизм, как нужно тебе нужно писать на ActiveX.... Но это мое личное мнение!

382
06 февраля 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Lsd[52r]

а по сути вопроса, то ИМХО отследить нажатие кнопки browse с html страницы не представляется возможным, потому что эта нопка не является отдельным элементом формы, следовательно никакие обработчики скорее всего не передаются системе.... мне кажеться что такой механизм, как нужно тебе нужно писать на ActiveX.... Но это мое личное мнение!


Я тоже пришел к такому же мнению. Поэтому задача изменилась - окошко вылетает по клику на кнопку "Отправить". Т.е. сначала выбрал файл ("Browse"), потом нажимешь "Отправить" и вылетатет окошко. Если логин и пароль совпадают, то файл закачивается на сервер, если нет, то пишется чего-нибудь матерное. Но как это сделать, если header можно выводить только до html???

437
06 февраля 2004 года
Lsd[52r]
106 / / 20.12.1999
Цитата:
Originally posted by dodger

Я тоже пришел к такому же мнению. Поэтому задача изменилась - окошко вылетает по клику на кнопку "Отправить". Т.е. сначала выбрал файл ("Browse"), потом нажимешь "Отправить" и вылетатет окошко. Если логин и пароль совпадают, то файл закачивается на сервер, если нет, то пишется чего-нибудь матерное. Но как это сделать, если header можно выводить только до html???



а так и делай! нажимаешь submit, управление передается другому скрипту. в нем до обработки входного потока отправляешь заголовки нужные, потом, после прохождения аутентификации, продолжаешь обрабатывать входные данные.

382
06 февраля 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Lsd[52r]

а так и делай! нажимаешь submit, управление передается другому скрипту. в нем до обработки входного потока отправляешь заголовки нужные, потом, после прохождения аутентификации, продолжаешь обрабатывать входные данные.


ОК. Я разнес в два разных скрипта. Но!!! Теперь он не проходит аутентификацию. Т.е. я ввожу правильный логин и пароль, это повторяется три раза, и потом вылетает сообщение об ошибке.
Что не правильно здесь:

 
Код:
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');

Парль и Логин жестко зашиты в код....что не так???
437
06 февраля 2004 года
Lsd[52r]
106 / / 20.12.1999
посмотри у тя в php.ini register_globals включен или нет? если нет, то именно по этому и не работает.... работай через массив $_SERVER

пример из мануала:
Код:
<?php
  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>"
;
  }
?>
382
07 февраля 2004 года
dodger
164 / / 07.02.2003
Теперь он вообще не появляется диалог, сразу выскакивает сообщение об ошибке следующего вида:
Код:
У вас отсутствуют разрешения на просмотр этой страницы
Указанные вами учетные сведения не позволяют просматривать данный каталог или страницу.

Попробуйте выполнить следующее:

    * Нажмите кнопку Обновить, чтобы использовать другие учетные сведения.
    * Если вы уверены, что должны иметь доступ к данному каталогу или странице, обратитесь к администратору веб-узла по электронной почте или по телефону, указанному на localhost домашней странице.

Ошибка HTTP 401.5 - Отсутствуют необходимые права доступа: доступ запрещен приложением ISAPI/CGI
Internet Information Services

Технические сведения (для сотрудников службы поддержки)

    * Общая информация:
      По указанному вами адресу на веб-сервере установлено приложение ISAPI или CGI, проверяющее правильность указания учетных сведений. Это приложение запретило подключение к серверу по указанным учетным сведениям.

Надо думать, что это IIS теперь чего-то орет!!! Где посмотреть на эти блокирующие фильтры? И какой именно может заблокировать?
437
07 февраля 2004 года
Lsd[52r]
106 / / 20.12.1999
а ну дык епт все понятно: чтобы пользоваться встроенной аутентификацией пхп должен быть установлен как модуль... если как cgi то она не работает!
382
07 февраля 2004 года
dodger
164 / / 07.02.2003
Цитата:
Originally posted by Lsd[52r]
а ну дык епт все понятно: чтобы пользоваться встроенной аутентификацией пхп должен быть установлен как модуль... если как cgi то она не работает!


Точно!!Загвоздка была в этом. Теперь вызывается окошко с аутентификацией!!! Ура!!! Все бы хорошо, если бы не одно НО! Я модифицировал скрипт из мануала вшив в него пароль и логин, вот он:

Код:
if((!isset($_SERVER['PHP_AUTH_USER']))||(!isset($_SERVER['PHP_AUTH_PW']))||($_SERVER['PHP_AUTH_USER']!='login')||($_SERVER['PHP_AUTH_PW']!='pass')){
    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>"
;
  }

Аутентификация не проходит!!! Почему? Ведь все правильно!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог