Опасная уязвимость - внимательность


4 0

Сегодня я расскажу о еще одной своей уязвимости в PHP сценарии. Если тебе интересно учится на чужих ошибках, то это тебе поможет. Вчера я зашел в админку сайта HackishCode и увидел там комментарий от пользователя, который был сохранен со статусом 1, при этом имя пользователя отсутствовало. Меня это очень сильно испугало, потому что со статусом 1 можно сохранить комментарий только если его подтвердил я лично или если его оставил зарегестрированный пользователь. Неужели кто-то зарегистрировался с пустым именем, и будет мусорить? Лезу в базу и выясняю, что нет такого человека. Явно где-то уязвимость, которой воспользовались нарочно или случайно и нужно пускаться в поиски!

Пробую оставить комментарий к первой попавшейся новости от не зарегистрированного пользователя, но он, как и положено, попадает в базу со статусом 0 и не отображается. Смотрю еще раз на базу и выясняю, что испорченный комментарий оказался в разделе исходников. Смотрю в код исходников а там защита идентична, как и в новостях. Логика сохранения проста и ошибиться сложно:

if (пользователь не зарегистрирован)
{
 Проверить код безопасности 
 установить переменную статуса в 0
}
{
  Установить переменную статуса в 1
}

Сохранить коммент в базе

Я пять минут сидел и смотрел на этот код, как баран на новые ворота и не видел ошибки. В таких случаях очень хорошо помогает сторонний и независимый взгляд, который видит код впервые. Чтобы представить себя на этом месте, я просто встал из-за компьютера, и посмотрел на код с немного другого расстояния и другой перспективы. И вот она уязвимость!! Я забыл поставить else между первым блоком в фигурных скобках и вторым. Второй блок просто выполняется в любом случае. И слава богу, что я пишу логику так, чтобы она не была сквоздной, т.е. она не повлияла на защиту от спама. Единственное, что мог получить хакер (в данном случае парень, который писал комментарий даже не думал обходить защиту и сделал это случайно) – возможность отобразить сообщение без модерации.

Вот так банальная невнимательность открыла небольшую дыру в моем PHP сценарии.


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


Комментарии

KIRILL

02 Октября 2008

А я еще думаю, что здесь else не хватало)))


Михаил Фленов

02 Октября 2008

Я об этом как раз и написал.


Orbis

02 Октября 2008

Быват :-)


asked86

27 Октября 2008

Да, всякое бывает за всем не уследить !


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

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

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

О блоге

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

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

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

Пишите мне