Безопасность при работе с данными форм

Вопросы об установке, настройке и работе самого фреймворка

Безопасность при работе с данными форм

Сообщение lifecoder » 12 мар 2010, 12:47

Доброго времени суток!

Пребываю в состоянии задумчивости над простым вопросом: насколько безопасно работать с пользовательскими данными, проходящими родную проверку CI XSS (в конфиге настройка $config['global_xss_filtering'] = TRUE; ), и что конкретно она делает.
В частности, можно ли загонять эти данные в БД без предварительной обработки/эскейпа, или его тоже стоит прибавлять к функциям валидации?

Так повелось, что в самописном микро-каркасе использовал такую конструкцию:
Код: Выделить всё
function safe($str){
    return 
mysql_real_escape_string(strip_tags(trim($str))); /*делаем эскейп, остальное не существенно*/
}

function 
safe_get(){
    foreach (
$_REQUEST as $key=>$val) {
        
$safe[$key]=safe($val);
    }
    return 
$safe;
}

some_controller_function(){
extract(safe_get()); /*или $query=safe_get(); , если страшно.*/
/*спокойно работаем с полученным ворохом переменных*/
}
 
lifecoder
 
Сообщения: 5
Зарегистрирован: 12 мар 2010, 12:30

Re: Безопасность при работе с данными форм

Сообщение Be3 » 12 мар 2010, 13:17

Определенно нельзя.
global_xss_filtering - защита от xss атак, на сколько знаю она в полной мере и от xss не защищает.
Аватара пользователя
Be3
Киборг убийца
 
Сообщения: 285
Зарегистрирован: 02 июл 2008, 06:25
Откуда: NSK

Re: Безопасность при работе с данными форм

Сообщение Tovit » 12 мар 2010, 14:06

ни одна универсальная функция не защитит на 100 процентов... ну разве что:
Код: Выделить всё

function xss_monster_cleaner
(&$input){
    
$input '';
    return ''; //никому нельзя верить!
}
 


Вот -- идеальная защита. Это не шутка. Идеальная защита не юзабельна!

Если Вы знаете в каких случая, какого рода данные вы будете принимать, такой фильтр и пишите.
Например, если Вы требуете от пользователя в конкретном поле ввести именно Имя, то можно так:
Код: Выделить всё

function name_cleaner
($name){
    return preg_match("/[^\w]+/", '', $name); //примерный вариант
}
 

А если ждете число -- фильтруйте при помощи is_numeric или приведением типов.
Вариантов множество. А стандартный xss-фильтр у CI больше мешает, чем помогает.
Фантазия! Фантазия! Она поможет... не форум!
Аватара пользователя
Tovit
Модератор
 
Сообщения: 1230
Зарегистрирован: 15 фев 2009, 17:18

Re: Безопасность при работе с данными форм

Сообщение lifecoder » 12 мар 2010, 15:42

Благодарю:)
Полистал документацию - класс работы с БД, точнее, его функция записи строки, автоматически проводит экранирование.
lifecoder
 
Сообщения: 5
Зарегистрирован: 12 мар 2010, 12:30

Re: Безопасность при работе с данными форм

Сообщение Big_Shark » 13 мар 2010, 03:05

Советую глобальную проверку отключить так как она прожорлива.
Код: Выделить всё
$config['global_xss_filtering'] = FALSE

и делать так
Код: Выделить всё
$this->input->post('aaa',TRUE); 

тут 2 параметр как раз и указывает делать xss или нет
Родной xss CI один из лучших у фреймверков.
На хабре как то писали про XSS и сказали что стандартного xss хватит за глаза.
А также используйте form_validation для более хорошей фильтрации.
Отвечу на ваши вопросы по CodeIgniter и Kohana3
Благодарности принимаются тут: 41001216991355 (ЯД)
Big_Shark
Модератор
 
Сообщения: 1307
Зарегистрирован: 03 фев 2009, 02:12
Откуда: Владивосток


Вернуться в Общие вопросы по фреймворку

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0