За последние 24 часа нас посетили 19333 программиста и 1605 роботов. Сейчас ищут 878 программистов ...

Принудительная HTTP-авторизация через PHP - возможно ли?

Тема в разделе "Прочие вопросы по PHP", создана пользователем grovin, 22 июн 2009.

  1. grovin

    grovin Активный пользователь

    С нами с:
    22 июн 2009
    Сообщения:
    4
    Симпатии:
    0
    Привет, парни!
    Прошу помощи профи! Запарился курить маны и изучать веб-секурити... ;)

    Короче, проблема в том, что нужно организовать избирательный вход юзеров в секцию сайта, которая изначально была предназначена для "избранных", доступ которым был разрешен туда (в директорию сайта) посредством стандартной HTTP-авторизации. Нужно изменить поведение таким образом, чтобы юзверьё, которое на "морде сайта" получает авторизацию по типу форумной (те через проверку логина-пароля по БД юзверей) могло войти в секурную секцию БЕЗ ВВОДА логина-пароля этой секции.
    //Это чтобы он/она НЕ ЗНАЛИ НИКАКИЕ пары логин-пароль закрытой секции - "что знают двое, знает свинья!" (с)

    Мыслится это так:
    - для юзверья в эту секцию заводится "общая" HTTP-авторизация с одним логином-паролем (скажем, useres/3jdie74d);
    - при прохождении любого юзера "обычную" процедуру аутентификации и при таргетинге его в закрытую секцию он перенаправлятеся пхп-скриптом туда - но с предварительной ПРИНУДИТЕЛЬНОЙ HTTP-авторизацией;
    - в закрытой секции юзеру предоставлено скриптами операции лишь те, которые соотв. его статусу (проверить несложно: $_SERVER['REMOTE_USER'] несёт в себе логин при входе в секцию с HTTP-авторизацией юзверьё - всё под одним логином, при том все "привелигированные" - под иными логинами, различными и отличными от useres, и поэтому "отделить овец от козлищ" проще пареной репы... :)

    Идея ясна и проста, не правда ли?
    А вот с реализацией - полный затык! ;(
    Начал с того, что зная возможность утилиты wget осуществлять принудительную HTTP-авторизацию (см скажем здесь: http://forum.ixbt.com/topic.cgi?id=24:7978 - см в самом конце: "Пример ниже демонстрирует, как авторизоваться на сервере, используя POST...") я пытался осуществить это же посредством header() с теми или иными заголовками - провал! Сколько не крутил и ни читал манов - не смог осуществить это. Не нахожу я заголовков ф-ции header, которые могли бы сделать то же самое под PHP...
    А скажем нагло вызывать wget из пхп не могу - сервер не выделенный и хостер не разрешает юзать вызовы никаких "внешних" программ из пхп... :(

    Что посоветуете, парни?
    Жду - дело застопорилось...
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Это легко. Покажи, что уже сделал.
     
  3. grovin

    grovin Активный пользователь

    С нами с:
    22 июн 2009
    Сообщения:
    4
    Симпатии:
    0
    Дык всё описано подробно! Что показать?
    Ни одного заголовка похожего на то что можно вставить в wget (как было показано в примере по ссылке) - чтобы впихнуть в header(), - в манах к своему удивлению не обнаружил...
    А если "легко" - так и приведи примерчик плиииз! :)
    Или ссылку на описалово как делается http-авторизация через вызов header()
     
  4. grovin

    grovin Активный пользователь

    С нами с:
    22 июн 2009
    Сообщения:
    4
    Симпатии:
    0
    Короче, разобрался с помощью найденного правильного 850 страничного мана: "Технология защиты информации в Интернете" (Специальный справочник). Стр 582 - "Схема Basic".
    Не получится в реализации моя задумка - увы, была идея красива и кажущаяся верной, но померла молодой - 1 дня от роду!.. ;)
    А суть в том, что ни какими средствами - не пхп ни вгетом, не заставить юзерский браузер "отдать" нужные логин-пароль по запросу сервера - все равно будет вылезать панелька хттп-авторизации.

    Так что вопрос закрыт - сам спросил - сам ответил!
    Идея как оказалось была мертворожденная - концептуально неправильная, как показало вскрытие.
     
  5. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    Код (Text):
    1.  
    2. master(root):/usr/www/#>wget --help | grep http | head -4 | tail -2
    3.        --http-user=USER        set http user to USER.
    4.        --http-password=PASS    set http password to PASS.
    Код (Text):
    1.  
    2. master(root):/usr/www/#>curl -v "http://440hz:441hz@php.ru"
    3. * About to connect() to php.ru port 80 (#0)
    4. *   Trying 77.234.201.222... connected
    5. * Connected to php.ru (77.234.201.222) port 80 (#0)
    6. * Server auth using Basic with user '440hz'
    7. > GET / HTTP/1.1
    8. > Authorization: Basic NDQwaHo6NDQxaHo=
    9. > User-Agent: curl/7.18.0 (amd64-portbld-freebsd7.0) libcurl/7.18.0 OpenSSL/0.9.8e zlib/1.2.3
    10. > Host: php.ru
    11. > Accept: */*
    12. >
    13. < HTTP/1.1 302 Moved Temporarily
    14. < Server: nginx/0.5.33
    15. < Date: Mon, 22 Jun 2009 19:36:15 GMT
    16. < Content-Type: text/html
    17. < Content-Length: 161
    18. < Connection: keep-alive
    19. < Keep-Alive: timeout=5
    20. < Location: http://www.php.ru/
    21. <
    22. <html>
    23. <head><title>302 Found</title></head>
    24. <body bgcolor="white">
    25. <center><h1>302 Found</h1></center>
    26. <hr><center>nginx/0.5.33</center>
    27. </body>
    28. </html>
    29. * Connection #0 to host php.ru left intact
    30. * Closing connection #0
     
  6. grovin

    grovin Активный пользователь

    С нами с:
    22 июн 2009
    Сообщения:
    4
    Симпатии:
    0
    Это что, - так "к слову"?
    Суть то какова?
    То что "вставляется", и не было проблемой или незнаемым, дело как оказалось концептуального свойства... ;)
    А все-таки - вопрос "на засыпку" Хакерам или "хакерам" - можно ли заставить каким-нить способом __юзерский__ бровзер принудительно авторизоваться стандартной хттп-процедурой, сделав это со стороны сервера?