Простая, но страшная уязвимость - значения по умолчанию


2 0

У меня на всех сайтах есть один и тот же файл, который рисует капчу и таким образом, гарантирует, что сообщения оставляются именно человеком, а не компьютером. Но я допустил одну маленькую ошибку, благодаря которой все мои усилия пошли прахом, а обойти защиту стало очень просто. Как все произошло? Банальная забывчивость сделать значение по умолчанию. Я прекрасно знаю о таких проблемах и тут сам попался на банальную ошибку. Ну ничего, это будет мне лишним уроком на будущее.

На сайте есть форма для ввода сообщения и при ее генерирования вызывается PHP файл, который рисует капчу и сохраняет в сессии нарисованный код. Казалось бы, из сессии код вычислить невозможно, но спамерам оказалось это и не нужным. Достаточно всего лишь создать форму у себя на компьютере и перенаправить ее так, чтобы он отправляла результат скрипту на сайте. При этом убирается ссылка на капчу, а значит, сценарий не сохранит в сессии ничего и секретный код будет пустим.

Мой сценарий на сервере производит проверку:

if (Секретный код из сессии == То, что прислал юзер)
{
 Все прекрасно
}

Так как файл рисования капчи не вызывался, левая часть условия пустая. Хакеру или спамеру остается только передать пустое значение в параметре, который должен был бы содержать капчу, и любой мат попадал в базу. Проблема решается двумя способами. Первый – подправить проверку на пустое значение, ведь нарисованный код не может и не должен быть пустым:

if (Секретный код из сессии == То, что прислал юзер && 
     Секретный код из сессии !="")
{
 Все прекрасно
}

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

if (Секретный код из сессии =="")
{
 Секретный код из сессии ="AAAA"
}

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

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


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

plaha

21 Сентября 2008

Нормально безопасность самое главное, а то спамеры будут засорять бд.


Kvl

25 Августа 2012

А при втором способе решения проблемы юзер не может прислать код "AAAA" и обойти?


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне