Форум: "Потрепаться";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизМожет такая тема здесь и неуместна.... Найти похожие ветки
← →
Дремучий (2002-11-14 11:02) [0]пишу форум... собственно с реализацией функциональности особых проблем нет. Однако, так как это моя первая работа на PHP, мне неизвестны многие подводные камни связанные с безопасностью скриптов. Не хочется, чтобы форум взломали на следующий (или в тот же) день. Пусть там через полгода - не так стремно будет. :)
Подскажите, как правильно должна оформлятся админская/модераторская/клиетская часть форума в плане надежности защиты от взлома. Заранее благодарен.
← →
McSimm (2002-11-14 11:43) [1]1. Для PHP одно из основных уязвимых мест это автосоздание переменных на основании параметров запроса, что дает взломщику возможность попытаться сымитировать начальную инициализацию переменных. Например такой код:
if (..какие-то проверки..) { $admin=1 }
...
где-то дальше:
if ($admin) { .... }
а $admin может быть введен в строке запроса..
Необходимо постоянно помнить о том, что переменная может иметь начальное значение.
2. при показе текста, введенного потенциальным хакером, необходимо продумать и закрыть всякие возможности использования им возможностей HTTP, особенно позволяющие обращаться к внешим ссылкам (frame, img, css и т.п.)
3. Символ A0 сразу запрети :)
← →
Дремучий (2002-11-14 12:08) [2]
> McSimm © (14.11.02 11:43)
с первым как бы все понятно... :))
т.е если взломщи "угадал/узнал" о существовании $admin,
то он может ее насильно проинициализировать через адресную строку? Выход - давать "важным" переменным нестандартные имена?
а можно ли поподробней о п.2 и п3.
← →
SPeller (2002-11-14 12:17) [3]
> Выход - давать "важным" переменным нестандартные имена?
Можно давать нестандартные значения, чтобы взломщику сложнее было угадать его.
← →
McSimm (2002-11-14 12:33) [4]
> > Выход - давать "важным" переменным нестандартные имена?
>
> Можно давать нестандартные значения, чтобы взломщику сложнее
> было угадать его.
не, ребята, вывод вы сделали достаточно странный. Надо инициализировать (или, напротив, делать unset) ключевые переменные.
а можно ли поподробней о п.2 и п3.
По поводу п.3 - это была подколка, если ты не понял.
(кстати, кто-то собирался целую статью написать об этом :)
По поводу п.2 можно очень много говорить и все равно обо всем не вспомнить.
Тут проще придерживаться нескольких правил.
- Не увлекаться всякими наворотами, дающими посетителям разные возможности (свое форматирование, вставка изображений и пр.)
- Не выискивать разные способы, которыми хакер может навредить, а разрешить только такой текст, в котором нет опасных возможностей.
Т.е. сразу убивать все < >(восстанавливая допустимые);
Никогда не полагаться на ограничения длины текста в HTML форме, а проверять.
Если текст попадает в вызов какой-нибудь функции PHP, проверять, нет ли у этой функции каких-либо особенностей...
← →
Дремучий (2002-11-14 12:46) [5]
> не, ребята, вывод вы сделали достаточно странный. Надо инициализировать
> (или, напротив, делать unset) ключевые переменные.
тогда подробней расскажи о способах их передачи в другие формы
из формы1 в форму2 нужно передать значение переменной $admin
где инициализировать? а где делать unset?
> По поводу п.3 - это была подколка, если ты не понял.
теперь уже понял... :))
Т.е. сразу убивать все < >(восстанавливая допустимые);
1)сначала заменить нужные < > на [],
2)убить все < >
3)заменить [] на < >
так? или можно покрасивше?
← →
McSimm (2002-11-14 13:06) [6]>где инициализировать? а где делать unset?
Не думал, что такой простой момент так трудно обьяснить.
Создавая в скрипте флаг (как показано в примере выше) просто всегда помни, что значение в нем уже может быть определено, поэтому либо
unset($admin) либо $admin=0, (по вкусу) перед.
if (..какие-то проверки..) { $admin=1 }
Либо блок else {$admin=0}.
Важно! это же (в особенной мере) касается переменных сессии. Поэтому не забывай об инициализации/очистке переменных сессии перед ее стартом.
>так? или можно покрасивше?
так может не полчится, пользователь может использовать [] с любым содержанием, а ты его в тег превратишь. Нехорошо получится.
Поэтому, лучше всего возвращать теги уже из состояния текста.
"<",">" -> "<",">";
" " -> ""
не допуская попадания внутрь тега постороннего текста (css может быть опасным).
← →
McSimm (2002-11-14 13:19) [7]ну вот, пример. Форум сьел текстовое представление тегов (хотя не должен был :( )
Последние строки читать так(без пробелов):
"<" , ">" -> "& lt;" , "& gt;"
"& lt;b& gt;" -> "< b >"
← →
AL2002 (2002-11-14 13:21) [8]Взломают тебя, Дремучий. Как пить дать взломают. :))
Особенно, если ты Гет в запросах пользуешь.
← →
Alx2 (2002-11-14 13:30) [9]
>Дремучий © (12.11.02 21:52)
Предмет веры может быть вполне реален. :))
Что мешает ходить по воде? Знание того, что ты утонешь.
Что разрешает ходить по воде? Вера в то,что ты можешь это сделать. Считаете фантастикой? Я думаю в те времена люди могли нафантазировать похлеще хождения по воде... Думаю, было бы вполне достаточно - исцеления слепых и оживление(а не воскрешение) Лазаря, мертвеца непервой свежести...
если нужен пример попроще -
девушка может послать парня...
но если он ВЕРИТ, что она его любит,
значит так оно и есть...
ИБО ВЕРА И ЕСТЬ 100% ЗНАНИЕ...
знание того, чего чего не знают неверующие...
В чем же дело? Поверь, что у тебя все в порядке и проблемы нет. Поверь, что ты все это знаешь. "ИБО ВЕРА И ЕСТЬ 100% ЗНАНИЕ..." И все заработает и будет надежно. Разве не твоя философия? Или ты сам себе противоречишь...
PS
Без обид?
← →
AL2002 (2002-11-14 13:41) [10]
> Без обид?
Да то он стопудово шутил.
← →
daan_m (2002-11-14 14:31) [11]>Дремучий
Когда появиться, то отпиши мне может, если понравиться, я там поселюсь на века:)
← →
Дремучий (2002-11-14 14:42) [12]> >где инициализировать? а где делать unset?
в приведенном примере все понятно :))
> так может не полчится, пользователь может использовать []
> с любым содержанием, а ты его в тег превратишь. Нехорошо
> получится.
так я не просто [xxxxx]- буду в тег превращать,
а только "[defined_tag]" - > <defined_tag>,
где defined_tag - дозволенный тег.
так нормально?
> AL2002 © (14.11.02 13:21)
> Взломают тебя, Дремучий. Как пить дать взломают. :))
> Особенно, если ты Гет в запросах пользуешь.
да без этого наверное и не бывает :))
вот ты наверное, первым и взломаешь. :)
Гет не использую, только POST.
Впринципе не вижу в Гет пока нужды.
А для чего он бывает крайне необходим?
>
> Alx2 © (14.11.02 13:30)
да за что обижаться то?
да все намного проще -
в том то и дело, что я не верю в то, что мой скрипт надежно защищен. Когда буду у верен, сообщу дополнительно.
:))
> AL2002 © (14.11.02 13:41)
отчего же шутил? Я просто, когда говорю, частенько улыбаюсь... :) Да бы и людям от этого веселей было, как в детской песенке... "и она к тебе не раз еще вернется..."
← →
McSimm (2002-11-14 14:54) [13]>а только "[defined_tag]" - > <defined_tag>,
>где defined_tag - дозволенный тег.
>так нормально?
Нет.
если пользователь напишет a := Mass[b];
а ты [b] в < b > превратишь?
>Гет не использую, только POST.
>Впринципе не вижу в Гет пока нужды.
>А для чего он бывает крайне необходим?
для взломщика нет особенной разницы.
А удобства GET бывают очевидны. На скрипт с параметрами можно дать ссылку, сохранить в виде ярлыка и т.п.
Кроме того, Refresh на странице, полученной от Post выводит надоедливый диалог о передаче параметров.
С другой стороны, POST позволяет передать больше информации.
← →
Дремучий (2002-11-14 14:54) [14]
> daan_m © (14.11.02 14:31)
> >Дремучий
> Когда появиться, то отпиши мне может, если понравиться,
> я там поселюсь на века:)
уверен, что тебе понравится, а вот на века ли?
если у тебя получиться, то я не против...
:))
← →
Ketmar (2002-11-14 14:54) [15]2Дремучий:
"я тоже знаю одного мальчика, ему на голову кирпич упал, а он улыбнулся и дальше пошел. так до сих пор и улыбается" (ц) анекдот %-)
Satanas Nobiscum! 14-Nov-XXXVII A.S.
← →
Дремучий (2002-11-14 15:02) [16]
> Ketmar © (14.11.02 14:54)
это был не я. :)
Вот тебе доказательства
:((((((
← →
Дремучий (2002-11-14 15:12) [17]если можно расскажите подробней про сессии
механизм работы, реализация(синтаксис) и предназначение
← →
AL2002 (2002-11-14 15:19) [18]
> 3. Символ A0 сразу запрети :)
Вот шифранул-то. Я и не допёр сразу.
2Дрема
А вот всегда пост — эт плохо.
Я имел в виду не саму форму (Post/Get), а PHP переменные PostVars & GetVars.
← →
Дремучий (2002-11-14 15:31) [19]
> 2Дрема
> А вот всегда пост — эт плохо.
>
> Я имел в виду не саму форму (Post/Get), а PHP переменные
> PostVars & GetVars.
почему плохо?
PostVars & GetVars?
я их вообще не использую
и про них расскажи
← →
AL2002 (2002-11-14 15:35) [20]> почему плохо?
Патаму что... Читай McSimm © (14.11.02 14:54)
> PostVars & GetVars?
> я их вообще не использую
> и про них расскажи
Ты мой продвинутый мануал по ПХП скачать успел?
Там всё есть.
← →
McSimm (2002-11-14 15:35) [21]http://www.php.spb.ru/php/session.html
← →
Дремучий (2002-11-14 17:28) [22]
> AL2002 © (14.11.02 15:35)
> > почему плохо?
> Патаму что... Читай McSimm © (14.11.02 14:54)
там указны не минусы ПОСТ, а плюсы ГЕТ
причем,
>>С другой стороны, POST позволяет передать больше информации.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c