Я хотел бы рассеять распространённый миф об НДП. Состоит он в том, что якобы посредством такой неизвестности нельзя обеспечивать безопасность. Как упоминалось ранее, НДП не является чем-то, что предлагает адекватную защиту, и на что стоит полагаться. Тем не менее, это не означает, что с помощью такой неизвестности совершенно не может быть обеспечена безопасность. Наоборот, уже имея в качестве основы безопасный механизм управления сессией, НДП может предложить небольшую степень дополнительной надёжности.
Помочь может простое использование вводящих в заблуждение имён переменных для уникального идентификатора и "отпечатков пальцев". Вы можете также передавать ложные данные, для того чтобы сбить с пути потенциального атакующего и ввести его в заблуждение. На эти техники для защиты, безусловно, полагаться никогда не стоит, но вы не даром потратите время, если организуете немного НДП в вашем собственном механизме. Для тех, у кого нет базового понимания безопасности сессий, вероятно, лучше всего поддерживать миф об НДП, иначе кто-нибудь может быть введён в заблуждение, поверив в то, что она даёт достаточный уровень защиты.
Важное замечание
Б.С: добавлено в апреле 2004-го с подачи RomikChef'а после .
Ещё раз (это важно!):
(a) если отпечаток класть в сессию (как сделано в листинге 5), то никакого третьего пункта мы не получаем, и для ВСД нужно выполнить лишь первые два (автор говорит об этом выше), так как предоставив идентификатор сессии, атакующий автоматически предоставит и отпечаток; (б) (об этом автор не упоминает) вариант передачи отпечатка в куках отпадает вообще, так как пользователи с отключёнными куками не смогут работать; остаётся передавать отпечаток GET-ом, и тогда:
(в) для пользователей с отключёнными куками GETом будет передаваться и идентификатор сессии, а значит, раз атакующий смог пройти первый пункт и узнать идентификатор, - то он знает и отпечаток, и третий пункт мы снова не получаем (автор сам говорит и об этом);
(г) (это самое главное и единственный случай, когда мы получаем третий пункт!) для тех, кто разрешил куки, действительно будет "обеспечен дополнительный уровень защиты" (о чём тоже говорит автор), но (автор не упоминает об этом), как и для пункта (в) передача отпечатка GETом требует от разработчика "руками" делать то, что в случае с идентификатором сессии автоматически делается включением session.use_trans_sid, т.е. автодополнять отпечатком ссылки и формы. Кроме того, если и реализовывать пункт (г), то класть в отпечаток заголовки особого смысла нет (ведь при реализации второго пункта защиты в сессию можно положить и несколько заголовков); вероятно, вполне достаточно будет и секретного префикса с идентификатором.
Резюме
Я надеюсь, что вы извлекли кое-что для себя из этой статьи. В особенности, теперь у вас должно быть базовое понимание того, как работает web, как достигается возможность сохранения состояния, чем в действительности являются куки, как работают PHP сессии и некоторые техники, которые вы можете использовать для улучшения надёжности ваших сессий.
Если у вас есть какие-либо вопросы или комментарии, — моя контактная информация доступна на моём web-сайте ; также вы можете размещать ваши отзывы на эту статью в форуме PHP Magazine'а . Я хотел бы услышать о ваших собственных методах безопасного управления сессией и я надеюсь, что эта статья обеспечит вводную информацию, которая понадобится вам для поддержки собственного творчества.
PHP,
21 ошибка программиста PHP. Часть 3 Описания семи, последних, "смертельных" ошибок. Эти ошибки концептуальны по своей природе и являются причиной появления ошибок, описанных в 1-ой и 2-ой частях статьи. Они включают и такие ошибки, как недостаточное внимание, уделённое как проекту в целом, так и коду программы, в частности....
PHP,
21 ошибка программиста PHP. Часть 2 Следующие 7 ошибок (#14-8) относятся к "серьёзным". Они ведут к ещё более значительному уменьшению скорости выполнения кода, уменьшению безопасности скриптов; код становится еще более запутанным.Одна из наиболее сильных сторон PHP является, одновременно, и его слабой стороной: PHP очень прост в изучении. Это привлекает многих людей; однако, несмотря на его кажущуюся простоту, не так-то просто научиться использовать этот язык правильно и эффективно....
PHP,
21 ошибка программиста PHP. Часть 1 Описываются 7 "детских" ошибок (21-15 в обратном порядке, в соответствии со степенью серьезности по нашей классификации). Такие ошибки не вызывают серьезных проблем, но приводят к уменьшению эффективности работы программы, а также выражаются в громоздком трудночитаемом коде, в который, к тому же, трудно вносить изменения.Одна из наиболее сильных сторон PHP является, одновременно, и его слабой стороной: PHP очень прост в изучении. Это привлекает многих людей; однако, несмотря на его каж...
PHP,
Переход к PHP5 Краткий обзор возможностей PHP по материалам PHP 5 beta 3. PHP, фактически, является самым распостраненным языком для Web программирования. В достижении этого статуса он прошел множество этапов, от простого языка для Web программирования который уступал многим (php3), до сегодняшнего быстрого мощного и расширяемого (PHP4). Тем более приятно, что PHP не стоит на месте и продолжает развиваться оставаясь таким-же простым для начинающих и предоставляя все больше возможностей более квалифицирова...
PHP,
Введение в PHP5 PHP5 ещё официально не вышел, но "рабочие" версии уже трудоспособны (равно как и нестабильны!), так что мы вполне можем начать изучение новых возможностей грядущего релиза PHP и попрактиковать с ними. В этой статье мы поговорим о трёх основных нововведениях в PHP5: новая объектная модель, исключения, пространства имён. ...