Форум сетевых администраторов
Показаны 15 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Безопасность в скриптах (http://netadmin.ws/forum/showthread.php?threadid=7999)


Помещено Vanish 28-02-2004 в 23:48:

Question Безопасность в скриптах

Вот хочется узнать народные методы повышения безопасности скриптов.
Особенно интересны методы предотвращения SQL Injection и Code Injection.
Ну если есть просвященные по XSS тоже буду рад почитать.

Чуть по позже опишу свои параноидальные идеи

__________________
No pity, no mercy, no regret.


Помещено he][es 29-02-2004 в 03:52:

Моё скромное
Советы банальны, проверять ВСЕ приходящие от пользователя переменные на валидность... и будет вам счастье...

__________________
Админ - вождь Апачей...


Помещено Vanish 29-02-2004 в 08:56:

Я спрашивал методы =) Проверять можно по разному.
Можно держать в голове и в одном месте ошибится, можно предоставить это самому скрипту, но тут тоже загвоздки есть.

__________________
No pity, no mercy, no regret.


Помещено polo 29-02-2004 в 11:11:

Особо нужно проверять те значения которые потом будут использоваться при обращении к базе. Ошибаться тут не нужно, так как каждая ошибка это дыра в скрипте.

__________________
Всегда есть решение.


Помещено he][es 29-02-2004 в 21:58:

quote:

Можно держать в голове и в одном месте ошибится, можно предоставить это самому скрипту, но тут тоже загвоздки есть.

Нафига тебе чего то в голове то держать?
и что значит "можно предоставить это самому скрипту"?
Берешь ты из GET-a цифру, так проверь, что это цифра или скажи ей что она цифра

__________________
Админ - вождь Апачей...


Помещено Vanish 29-02-2004 в 22:34:

quote:
Берешь ты из GET-a цифру, так проверь, что это цифра или скажи ей что она цифра

вот походу ты начинаешь понимать о чем я разговор завел.
quote:
Особо нужно проверять те значения которые потом будут использоваться при обращении к базе. Ошибаться тут не нужно, так как каждая ошибка это дыра в скрипте.

ну я не первый год женат =) А по поводу не нужно ошибаться, тут проблема стандартна, к сожалению при наращивании функциональности на скрипт иногда происходят нежелательные ошибки, тем более когда скрипт разрастается. Как говорится: "никто не застрахован".

Вот давайте рассуждать что необходимо для "ленивой" безопасности:
1. register_globals = 0 или же пишем так как будто выключена. Следовательно получаем значения присланные пользователем из $_POST и $_GET
2. раз мы уж получаем значения, то почему бы сразу их не обработать. Допустим под это дело мы выведем функцию, с параметрами названий переменных которых мы должны глобализовать.
3. а почему бы в пункте 2 сразу и не привести глобализуемые переменные:
а) к необходимому типу (допустим я все переменные обозначаю по Венгерской нотации)
б) очистить их от нежелаемого контента

Вот в таком путь имеет какие либо подводные камни?

Про работу с базой мы поговорим позже.

__________________
No pity, no mercy, no regret.


Помещено polo 29-02-2004 в 22:57:

У каждого свои методы программирования, глобализовать только нужные переменные легко, но вто как их сразу проверить? Ну можно сделать общие проверки типа trim, ну еще удалить javascript, иметь общие название например для передаваемых ID (они опаснее всего и чаще всего передаются) и превратить их в intval, на этом дело заканчивается. Далее нужно все проверять индивидуально, я к тому что нельзя написать универсальную функцию для этого.

__________________
Всегда есть решение.


Помещено Denveroid 06-03-2004 в 21:20:

Замечательная функция:

PHP:


function xss_clean($var)
{
    
$var = preg_replace( '/javascript/i', 'java script', $var );
    
$var = str_replace( '"', '"', $var );
    
$var = str_replace( '<', '&lt;', $var );
    return 
str_replace( '>', '&gt;', $var );
}



чистит весь критичный юзер-инпут.
Плюс ко всему, я например использую функцию, которая валидирует практически любой юзер-инпут: начиная с интов, флоатов, email, и кончая IP с разными условиями и MAC адресами.
Что еще сказать... В запросах всегда использую одинарные кавычки вокруг переменных. И насчет magic_quotes_gpc... надо быть очень внимательным, если она включена.

__________________
`
SiteMaker.Ru - Академия сайтостроительства


Помещено Vanish 06-03-2004 в 21:39:

quote:
которая валидирует практически любой юзер-инпут: начиная с интов, флоатов, email, и кончая IP с разными условиями и MAC адресами

каким образом распознаешь как надо валидацию делать?
что то у меня кроме особого названия переменных ничего больше не придумать

__________________
No pity, no mercy, no regret.


Помещено Denveroid 06-03-2004 в 23:27:

field_validator($field_descr, $field_data, $field_type, $min_length="", $max_length="", $field_required=1)

__________________
`
SiteMaker.Ru - Академия сайтостроительства


Помещено Vanish 07-03-2004 в 11:02:

Denveroid понятно, просто ты ручками обрабатываешь входные переменные, поочередно прогоняя их через эту функцию, самостоятельно указывая тип.

__________________
No pity, no mercy, no regret.


Помещено Denveroid 07-03-2004 в 13:10:

Vanish
Совершенно верно. Ну а чего тут велосипед придумывать то?

__________________
`
SiteMaker.Ru - Академия сайтостроительства


Помещено doc 01-04-2004 в 02:15:

Denveroid

Не перегружая обработчик повторами функций можно записать


PHP:


$typed_text 
= htmlspecialchars($typed_text, ENT_QUOTES);



что в результате аналогично этому ... а выполняеться побыстрее

PHP:

function xss_clean($var) 
{ 
    
$var = preg_replace( '/javascript/i', 'java script', $var ); 
    
$var = str_replace( '"', '&quot;', $var ); 
    
$var = str_replace( '<', '&lt;', $var ); 
    return 
str_replace( '>', '&gt;', $var ); 
}

__________________
Есть вопросы спрашивайте!


Помещено rio 02-04-2004 в 15:55:

Господа, а не забацать ли нам класс по этому поводу ? ... Один глобальный класс , который решит проблемму приходящей от конечного пользователя информации .

P.S.: Не слушайте пьяных людей (что-то последнее время очень часто дни рождения у юзеров )

__________________
Ковчег построили дилетанты, а профессионаллы построили "Титаник" - не бойтесь спрашивать то , чего вы не знаете , а так же делать то - чего не умеете !


Помещено Vanish 02-04-2004 в 17:30:

что то господ на чистую воду не вывести, жмутся...
вспомним венгерскую нотацию, там же тип в имени переменной указывается, а это шаг к возможности определения типа переменной в скрипте и проверка на валидность пришедших данных.

__________________
No pity, no mercy, no regret.


Формат времени GMT. Текущее время 12:36.
Показаны 15 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.