Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-14621
For
2002-11-25 04:58
2002.12.05
Вопрос про глобальную переменную?


1-14651
serg1977
2002-11-25 15:32
2002.12.05
вычисление строки используя алгоритм обратной польской записи


3-14421
Dbrf
2002-11-15 14:14
2002.12.05
Межстроковое расстояние RichEdit


14-14743
akzhan
2002-11-12 15:32
2002.12.05
меня имеют на RSDN :-)


14-14736
mad0max
2002-11-13 09:33
2002.12.05
итак... набирается команда





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский