Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Может такая тема здесь и неуместна....   Найти похожие ветки 

 
Дремучий ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
1-14636
Азазелло
2002-11-25 10:32
2002.12.05
Delphi+CR, передача null в качестве параметра..


1-14551
Мазут Береговой
2002-11-27 01:35
2002.12.05
Взаимодействие форм...


7-14848
Aric
2002-10-02 21:14
2002.12.05
Глобальный хук на мышку


1-14597
maxim2
2002-11-27 15:24
2002.12.05
Как обратится к объекту ?


14-14752
Рыжик
2002-11-14 15:05
2002.12.05
Мышкино колесо