Хобрук: Ваш путь к мастерству в программировании

Учебник по аутентификации пользователей PHP без сессий

Мне нужно построить свою собственную систему для части проекта компьютерной безопасности без использования сеансов php (только файлы cookie), и я просто потерял. Все учебники, которые я нашел, используют сеансы (по уважительной причине), поэтому мне было интересно, знает ли кто-нибудь о том, как свернуть свой собственный учебник по аутентификации пользователя php.


  • очевидный вопрос: почему не сеансы? 13.02.2012
  • Профессор написал в предписании не использовать их. На самом деле это задание связано с реализацией моих собственных функций безопасности, и сеанс чтения waht ive позаботится об этом во многом. 13.02.2012
  • Вы бы сделали это точно так же, по сути. Вы просто сохраните состояние в файле cookie вместо сеанса. Попробуйте поискать в Google, как вообще использовать файлы cookie в PHP. Возвращайтесь, если вы не можете заставить их работать. Кроме того, кто в мире сказал вам, что сессия заботится о функциях безопасности, которых нет у файлов cookie? Если только ваша младшая сестра не проникает в компьютер, чтобы прочитать файлы cookie вашего браузера, они не сильно отличаются с точки зрения безопасности. Сеансы требуют, чтобы файлы cookie были включены для работы. 13.02.2012
  • Не могу придумать никаких руководств, поэтому я не буду публиковать ответ. Вы можете довольно легко свернуть свои собственные сеансы, сохранив идентификатор сеанса в файле cookie пользователя и имея некоторый файл или хранилище базы данных, на которое вы можете ссылаться по их идентификатору сеанса (однако не могу комментировать безопасность этого подхода). Например. $session = DB::getSession($_COOKIE['sid']); 13.02.2012
  • Профессор просто потребовал, чтобы вы не использовали встроенные сеансы PHP, или он вообще имел в виду какие-либо сеансы? 13.02.2012
  • Другой возможностью может быть использование какой-либо криптографии для «подписания» файла cookie пользователя таким образом, чтобы вы могли проверить его подлинность, но не могли быть легко продублированы третьими лицами (хотя это по-прежнему оставляет вас уязвимым для прослушивания файлов cookie). Подходящим может быть асимметричный алгоритм, такой как RSA. 13.02.2012
  • @Dagon Вы здесь дурак: большинство сеансов ВСЕ ЕЩЕ используют файлы cookie для отправки и хранения идентификатора сеанса. Профессор целенаправленно просит его попытаться заново изобрести сессию. Я совершенно уверен, что профессор не хочет, чтобы его творение использовалось в «реальном мире», но возможность самостоятельного решения реальных проблем чрезвычайно ценна. Тот факт, что это уже сделано, не уменьшает ценности. 13.02.2012
  • возможно, но у меня есть большая проблема с тем, как практические предметы преподаются практически без учета того, как они будут использоваться в реальном мире. 13.02.2012
  • @LeviMorrison Назовите меня сумасшедшим, но я не вижу смысла учить студента абстрактно думать о практической, реальной проблеме программирования. Вот для чего нужны ваши уроки математики. Научите решать проблемы там. Ваши занятия по COMPSCI должны научить вас, как лучше всего правильно решить проблему в реальном мире. Кроме того, действительно ли PHP является лучшим языком для обучения решению проблем? Ээээ... наверное нет. 13.02.2012
  • @Dagon Присоединяйтесь ко мне в чате: chat.stackoverflow.com/rooms/11/php 13.02.2012
  • @rdlowrey Присоединяйтесь ко мне в чате: chat.stackoverflow.com/rooms/11/php 13.02.2012

Ответы:


1

Вы могли бы в основном реализовать что-то вроде сеанса, такого как вы.

Сюда будут входить следующие задачи:

  • генерировать случайный идентификатор сеанса для новых пользователей (или при входе в систему - в зависимости от точного использования...)
  • сохранить его в куки
  • сохраняйте дополнительную информацию о сеансе где-нибудь на сервере вместе с идентификатором сеанса (например, в таблице базы данных)
  • при последующих обращениях к странице проверяйте идентификатор сеанса в файле cookie по сравнению с данными на веб-сервере, чтобы идентифицировать пользователей и предоставить доступ

Однако следует отметить, что решение, основанное только на файлах cookie, никогда не бывает таким хорошим. Например, если у клиента не включены файлы cookie, он вообще не будет работать. Возможным решением для этого является отправка идентификатора сеанса в качестве параметра GET с каждой внутренней ссылкой, если файлы cookie не включены.

13.02.2012
  • Я собирался написать по существу то же самое, поэтому я просто +1 и добавлю ссылка о сеансах и файлах cookie. 13.02.2012
  • +1 Я только что написал тот же ответ, но отказался от него в пользу этого. 13.02.2012
  • Спасибо, между этим ответом и чтением того, как использовать файлы cookie в PHP, я думаю, что готов. 13.02.2012

  • 2

    Сеансы облегчат задачу. Как говорится, где ты застрял, приятель?

    Чтобы начать использовать файлы cookie в PHP, проверьте это: http://www.w3schools.com/php/php_cookies.asp

    Вы могли бы либо

    • реализовать свою собственную обработку сеанса, как предлагает s1lence (что может быть именно тем, что профессор хочет, чтобы вы сделали) или
    • реализовать свою собственную обработку сеанса, добавив идентификатор сеанса в QueryString (чтобы он работал для браузеров без файлов cookie) или
    • вы можете сохранить пару пользователь/пароль в файлах cookie (что заставит вас повторно аутентифицировать пользователя для каждого запроса)

    Я бы не рекомендовал последнее, но если все дело в том, чтобы избежать механизма сеанса, я думаю, это вариант. И последнее замечание: если это не имеет никакого отношения к пониманию того, почему сессия важна, вам действительно следует подвергнуть сомнению задачу вашего учителя.. ;)

    13.02.2012
  • он хочет, чтобы мы реализовали собственную обработку сеанса 13.02.2012

  • 3

    Вы не должны использовать куки для такой системы, потому что куки хранятся на стороне клиента. И изменить его может любой. Сессии хранятся на стороне сервера, и только вы можете изменить их (также другие пользователи системы могут изменить их, если у них есть доступ к каталогу или доступ к БД, если вы храните сеансы в БД). Если вам очень нужно использовать куки, вы можете зашифровать логин/пароль, можете писать в куки, но использование сессий более безопасно.

    13.02.2012
  • Это сомнительный совет, так как идентификатор сеанса все еще должен храниться в файле cookie на стороне клиента. Если злоумышленник имеет доступ к системе клиента, сеанс не безопаснее, чем файл cookie. 13.02.2012
  • @rdlowrey Дело в том, что пользователь может десериализовать файл cookie и манипулировать хранящимися в нем переменными скрипта, например, установить $user_is_admin = true, и скрипт будет перечитывать обработанные данные во время следующего запроса и думать, что у пользователя больше прав, чем у него на самом деле делает. Сохранение только идентификатора сеанса намного безопаснее, поскольку клиент сначала должен получить идентификатор, назначенный сеансу администратора. 13.02.2012
  • Безопасность @the-banana-king касается не законного пользователя, а злоумышленника, не говоря уже о том, что даже $_SESSION данные должны быть проверены на стороне клиента. Сценарий, который вы представляете, не более сложен для злоумышленника, чем доступ к файлу cookie идентификатора сеанса. Кроме того, предполагается плохой внутренний дизайн приложения и проверка данных: ошибка, на которую не влияет использование сеансов по сравнению с файлами cookie. Так что да, если вы не собираетесь должным образом защищать свое приложение, возможно, сеансы на 1% безопаснее, чем файлы cookie. 13.02.2012
  • @rdlowrey На самом деле я говорил о вредоносном клиенте, который хочет расширить свои привилегии или воспользоваться возможностью изменить какое-либо другое внутреннее состояние приложения. Если у вас есть только идентификатор сеанса, вы, как клиент, не можете изменять какие-либо данные, прикрепленные к нему на стороне сервера, если только сценарий не позволяет вам это сделать. 13.02.2012
  • Я думаю, мы говорили о разных аспектах. Я согласен с тем, что аутентификация путем кражи идентификатора сеанса так же проста, как и кражи полных учетных данных из файла cookie клиента, но перехват сеанса дает вам доступ до тех пор, пока он не станет недействительным, а получение имени пользователя и пароля позволяет вам повторно аутентифицироваться так часто, как вы хотите . Поэтому хранение идентификатора сеанса еще более безопасно. 13.02.2012
  • @the-banana-king Я согласен с вашей логикой, сэр. 13.02.2012
  • Новые материалы

    Тег скрипта в вашем HTML-документе
    Вековые дебаты среди сообщества разработчиков, таких как страны союзников и коммунисты времен Второй мировой войны, все еще продолжаются до сегодняшнего дня о том, где лучше всего разместить..

    Введение в Машинное обучение Azure
    Машинное обучение Azure (AML) — это облачная служба машинного обучения, которая позволяет быстро и легко создавать, обучать и развертывать модели машинного обучения. Он предоставляет ряд..

    Обработка ошибок Javascript
    попробовать / поймать / наконец / бросить Обработка ошибок Javascript может помочь отладить код. Это отличный инструмент для понимания и соответствия. Это может быть не самый веселый пост, но,..

    Лучшие и необходимые инструменты внешнего интерфейса
    Интернет полон различных инструментов программирования, которые помогают современному разработчику делать вещи быстрее и качественнее, чем когда-либо прежде. Если вы наткнулись на эту статью, вы,..

    Ограничения длины, которые вы должны знать как веб-разработчик
    В коде заголовок веб-страницы определяется тегом title, который появляется в верхней части html-документа внутри тега head. Теоретически содержимое тега title может быть любым, если вы его..

    Написание собственного кода Java во Flutter для Android
    Реализация Java в приложениях Flutter Flutter имеет богатый набор пакетов и виджетов. Вы можете добиться большинства вещей, используя богатый пул виджетов, который предлагает Flutter, или..

    ASCII и Юникод (UTF)
    ASCII (Американский стандартный код обмена информацией). Представление текста с помощью чисел. Первоначально он был разработан для телетайпов, по сути, для обычного текста без форматирования...