![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| alexey009 |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Требуется передать данные серверу через форму, вот например
Соответственно обработка:
ну и вывод соответственно
И наконец вопросы: 1. Какие тут остались дыры? 2. Как можно улучшить код? 3. Что ещё вы посоветуете по теме? |
||||||
|
|||||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
Если база mysql, то mysql_real_escape_string, а код который у вас не годится
|
|||
|
||||
| alexey009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Можно поконкретнее, что именно тут не так?
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
1. Данные в Базу должны писаться чистыми, пропущенными через mysql_real_escape_string, этот механизм с помощью addshaches/stripslaches не реализуется.
2. Проверка на целочисленность ID является абсурдом, когда есть ctype_digit() или уж хотя бы is_numeric. |
|||
|
||||
| alexey009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Mal Hack, с 1 понял, а вот со 2-ым.
А если какой-нибудь хакер соберет у себя форму, ну и sql запрос выполнит! Тогда так получается.
А с выводом все ок? |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
А что тут не понялтно? Те функции которые привел я - более рациональный вариант решения вашей задачи. Вообще как правило, если данные не верны, то выводится сообщение об ошибке, а не вызываетяс exit. В базе будут "сырые" данные, т.е. что в скрипт пришло, то в базу и попало. А уж что-то и как вам надо вывести - смотрите сами. Надо вывести html - применяйте htmlspecialchars. Тут уж вы решаете в зависимости от задачи. |
|||
|
||||
| alexey009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Не знал я этих функций... Если что, то у меня там выводилась ошибка и уж потом уже exit:) а какие тут ещё могут быть дыры? |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
||||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
значит так. то, что можно назвать "взломом сервера". при "идеальной" алгоритмической части(т.е. не пишем имя пользователя в поле "количество детей" и т.п. - без алгоритмичеких ошибок) возможны следующие варианты. 1. sql injection: когда вместо строкового значения приходит "' or 1=1" или нечто подобное. от сего защищает mysql_real_escape_string, которая экранирует кавычки. 2. некорректный ввод: когда вместо числового значения приходит "блаблбла". тут - либо проверять тип(is_numeric, ctype_digit,либо регулярными выражениями) и выдавать вменяемое сообщение "дурак, не то ввел 3. хакер узнает версию PHP, Apache или MySQL, находит известные уязвимости и юзает эксплоиты(вариант - находит уязвимости и создает эксплоити). тут противодействовать(особенно - если хостинг не выделенный сервер, а виртуальный выделенный сервер) особо некак, но можно изучить вопорс, разыскивая уязвимости самостоятельно и примеряя их на свою систему(к примеру, на bugs.php.net поискать "buffer overflow", в результатах поиска выявить признанные и определить,относится ли к твоей версии; аналогично, можно изучит багтрекинговую систему для apache(security и bugs) и mysql). или изучить сводные порталы с информацией о уязвимостя(известные мне, правда, порядком "опопсели" за последние несколько лет :(), типа securitylab.ru или xaker.ru(возможно, англоязычные сообщества более живучими оказались...) впрочем, третий варант требует времени, трудозатрат и редкой в эпоху "кодеров" квалификации. Потому такой взлом наименее вероятен. -------- то, что можно назвать "взломом клиента" - если у тебя выводятся какие-то данные, полученные от клиента, то клиент может разместить html-код. если код не будет заэкранирован(к примеру, лучше всего, как считается, делаеть это либо при помоши strip_tags без указания исключений, либо при помощи htmlspecialchars). В противном случае, клиент сможет вставить в твою страницу не просто html-код,который максимум - порушит дизайн, а javascript, который может натворить немало неприятных вещей: дискредитирует сайт, "украдет" авторизационные данные*(оправив на сайт, контролируемый автором зловредного кода) и много чего не менее неприятного. -------- Указанное выше - это, если можно так сказать, "базовый" уровень. при использовании сессий в PHP(разве их кто-то не использует?) возможны также разные не очень приятные ситуации. но связаны уже не со "взломом сервера", а(как "максимум") - с воровством авторизационной информации пользователя. посмотреть можно по факту поиска. хотя бы есть тема "Безопасность. О чем подумать?" |
|||
|
||||
| alexey009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Спасибо
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |