[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужен совет!
GreatMax
Так как у меня входных данных много как по $_POST, так и по $_GET, а описывать их в таком виде:


$i =!empty($_POST['i'])? trim($_POST['i']):NULL;


Занимает много строк! 50-60 переменных.

Сделал класс типа:

class secure
{
public function clear_get($_GET)
{
foreach ($_GET as $inx => $var)
{
if (!empty($_GET[$inx]))
{
$_GET[$inx] = trim($_GET[$inx]);
$_GET[$inx] = mysql_real_escape_string($_GET[$inx]);
$_GET[$inx] = htmlspecialchars($_GET[$inx]);

}
else
$_GET[$inx] =NULL;

}
}


public function clear_post($_POST)
{
foreach ($_POST as $inx => $var)
{
if (!empty($_GET[$inx]))
{
$_POST[$inx] = trim($_POST[$inx]);
$_POST[$inx] = mysql_real_escape_string($_POST[$inx]);

}
else
$_POST[$inx] =NULL;

}
}
}



Запуская класс в начале файла, да и во всех файлах.

$secure = new secure();
$secure -> clear_get($_GET); //Фильтруем GET массив
$secure -> clear_post($_POST);//Фильтруем POST массив





В коде переменные идут на прямую из массива $_POST['i'].

Посоветуйте правильно ли я сделал?



Спустя 7 минут, 42 секунды (19.04.2011 - 12:51) Trianon написал(а):
а зачем их фильтровать?

Спустя 2 минуты, 18 секунд (19.04.2011 - 12:53) GreatMax написал(а):
Цитата (Trianon @ 19.04.2011 - 09:51)
а зачем их фильтровать?

Странный вопрос! SQL Injection Вам о чём нибудь говорит?

Спустя 11 минут, 38 секунд (19.04.2011 - 13:05) Семён написал(а):
от SQLInj переменные фильтровать нужно в классе SQL, конкретно для placeholders.
не считайте себе умнее других, если вам задают такие вопросы

Спустя 25 секунд (19.04.2011 - 13:05) Oyeme написал(а):
1.Без смысленно использования класса.
2.Зачем подавать Get и Пост массив если он глобальный массив.
Тут проще это сделать функцией

Вот так


function PostP($name = ''){
$arr = array();
if(empty ($name))
$arr = array_map("htmlspecialchars", $_POST);
else
$arr = htmlspecialchars(@$_POST[$name]);

return $arr;
}

print_r(PostP()); //This function filters an array
print_r(PostP('Name of element')); //This function filter - a specific array element

Спустя 1 минута, 27 секунд (19.04.2011 - 13:07) Семён написал(а):
Oyeme а если массив многомерный? )))

Спустя 3 минуты, 14 секунд (19.04.2011 - 13:10) GreatMax написал(а):
Цитата (Oyeme @ 19.04.2011 - 10:05)
1.Без смысленно использования класса.
Тут проще это сделать функцией

Вот так


function PostP($name = ''){
$arr = array();
if(empty ($name))
$arr = array_map("htmlspecialchars", $_POST);
else
$arr = htmlspecialchars(@$_POST[$name]);

return $arr;
}

print_r(PostP()); //This function filters an array
print_r(PostP('Name of element')); //This function filter - a specific array element

Почему?
К этому классу добавятся позже проверка полей формы, тех же самых входных данных на предмет допустимости их по длине и составу и т.д.

Спустя 2 минуты, 2 секунды (19.04.2011 - 13:12) GreatMax написал(а):
Класс же не только фильтровать будет, но и контролировать входные данные по заданным параметрам! Это уже несколько функций. Функции мало эффективны в больших приложениях. У меня изначально было на функциях, пока из не стало более 1000 и всё, потом хрен что можно найти. А тут делаем класс который управляет всеми входящими данными. Если что то надо, добавить просто открыл вписал пару строк и всё.

Спустя 41 секунда (19.04.2011 - 13:13) Семён написал(а):
GreatMax
с полной уверенностью могу заявить что вы говнокодер

Спустя 1 минута, 31 секунда (19.04.2011 - 13:14) GreatMax написал(а):
Цитата (Семён @ 19.04.2011 - 10:13)
GreatMax
с полной уверенностью могу заявить что вы говнокодер

Я тебе не просил оценки давать, я просил совета. Твоё личное мнение оставь при себе.

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

Спустя 2 минуты, 42 секунды (19.04.2011 - 13:17) Raito-kun написал(а):
$_GET[$inx] = trim($_GET[$inx]);
$_GET[$inx] = mysql_real_escape_string($_GET[$inx]);
$_GET[$inx] = htmlspecialchars($_GET[$inx]);

а зачем вот эта жесть? классическая клиника еще обычно включает стрип тегс, слава б-гу у вас хоть этого нету :D
и если уж так хочется применять фильтр, то зачем отдельно гет и пост? они оба находятся в request

Спустя 1 минута, 33 секунды (19.04.2011 - 13:19) GreatMax написал(а):
Цитата (Raito-kun @ 19.04.2011 - 10:17)
$_GET[$inx] = trim($_GET[$inx]);
$_GET[$inx] = mysql_real_escape_string($_GET[$inx]);
$_GET[$inx] = htmlspecialchars($_GET[$inx]);

а зачем вот эта жесть? классическая клиника еще обычно включает стрип тегс, слава б-гу у вас хоть этого нету  :D
и если уж так хочется применять фильтр, то зачем отдельно гет и пост? они оба находятся в request

Фильтровать потому что нужно по разному. Т.к. через некоторые переменные идут данные с HTML из редактора.

Фактически можно оставить только:
$_GET[$inx] = mysql_real_escape_string($_GET[$inx]);

Спустя 7 секунд (19.04.2011 - 13:19) neadekvat написал(а):
GreatMax, почитай в faq 6-й пункт.

Raito-kun, причем тут _REQUEST? Это совершенно отдельный массив. И если данные приходят методом _POST, то и обрабатывать их надо соответствующим образом. Хотя бы по логике.

Спустя 1 минута, 55 секунд (19.04.2011 - 13:21) alex12060 написал(а):
Для фильтрации вполне подойдут 2-3 функции из стандартного набора пхп. Создавать для этого отдельный класс нет смысла. Конечно, если Вам, к пример, нужно использовать глубокую фильтрацию, что-то вытаскивать из ГЕТ и ПОСТ, там, разбивать данные на что-то и так далее, то класс для этого можно создать, а так, не нужно.

Спустя 3 минуты, 52 секунды (19.04.2011 - 13:25) Oyeme написал(а):
Использование классов должно соответствовать логике.
В Вашем случаи Вы будете вызвать каждый раз экземпляр класса.Ради глобального сассива,которого Вы будете использовать практически везде.
В этом случаи функция выполняется намного быстрее.Вы можете так же хранит статический ответ внутри функции.

Правильный подход?Вы можете посмотреть в движках,которые применяет концепцию MVC.

Спустя 1 минута, 7 секунд (19.04.2011 - 13:26) Raito-kun написал(а):
Цитата
Raito-kun, причем тут _REQUEST? Это совершенно отдельный массив. И если данные приходят методом _POST, то и обрабатывать их надо соответствующим образом. Хотя бы по логике.

логика создается программистом. всё что идет на выход должно пройти через htmlspecialchars, всё что в базу - через mysql_real_escape_string. и то что идет на выход не обязательно должно приходить из гета, а то что идет в базу не всегда приходит из поста. поэтому нельзя написать универсальную функцию фильтрации. но можно выделить одинаковые действия для гета+поста и тогда чтобы не делать двойную работу легче использовать реквест

Спустя 4 минуты, 5 секунд (19.04.2011 - 13:30) neadekvat написал(а):
Raito-kun, о чем ты? Тема одна, говоришь о втором, вывод - третий.

Единственное, что можно сделать с входными параметрами, так это очистить их от следов магических кавычек, которые, по-хорошему, должны быть уже давно выключены.

Функции htmlspecialchars и mysql_real_escape_string можно применять к конкретным значениям, но никак не к целому массиву входных параметров.

Спустя 2 минуты, 27 секунд (19.04.2011 - 13:32) GreatMax написал(а):
Цитата (neadekvat @ 19.04.2011 - 10:30)
Raito-kun, о чем ты? Тема одна, говоришь о втором, вывод - третий.

Единственное, что можно сделать с входными параметрами, так это очистить их от следов магических кавычек, которые, по-хорошему, должны быть уже давно выключены.

Функции htmlspecialchars и mysql_real_escape_string можно применять к конкретным значениям, но никак не к целому массиву входных параметров.

В итоге класс не нужен, а просто mysql_real_escape_string

Спустя 17 секунд (19.04.2011 - 13:32) Raito-kun написал(а):
Цитата
Функции htmlspecialchars и mysql_real_escape_string можно применять к конкретным значениям, но никак не к целому массиву входных параметров.

я об этом и написал. что эти функции не могут применяться ни к гет ни к пост ни к реквест. поэтому класс опа изначально бесполезен. но у него есть например трим применяющийся в обоих функциях.

Спустя 3 минуты (19.04.2011 - 13:35) GreatMax написал(а):
Цитата (Raito-kun @ 19.04.2011 - 10:32)
Цитата
Функции htmlspecialchars и mysql_real_escape_string можно применять к конкретным значениям, но никак не к целому массиву входных параметров.

я об этом и написал. что эти функции не могут применяться ни к гет ни к пост ни к реквест. поэтому класс опа изначально бесполезен. но у него есть например трим применяющийся в обоих функциях.

У меня в основном данные идут в базу. Применю
mysql_real_escape_string($_POST['i'])


и всё, без классов, без функций и присвоения типа
$i=!empty($_POST['i'])? trim ($_POST['i']):NULL;

Спустя 1 час, 7 секунд (19.04.2011 - 14:36) Basili4 написал(а):
GreatMax
Цитата (GreatMax @ 19.04.2011 - 14:14)
Когда я этим занимался, тебе и в проекте не было, т.к. я тебя старше на половину твоего возраста.

Я вот только, что разговаривал вот с таким вот "опытным" челом. Вам скажу тоже что и ему
иди в сад. Ваш код на Говнокод.

Спустя 1 час, 10 минут, 28 секунд (19.04.2011 - 15:46) GreatMax написал(а):
*Я люлблю твороженные булочки!

 ! 

М
Уважай собеседника, предупреждение за маты
inpost

Спустя 11 минут, 56 секунд (19.04.2011 - 15:58) Trianon написал(а):
совет в общем-то такой.
Отойти от идеи превентивной подготовки переменных для укладывания в SQL-, HTML- и в прочий код, поскольку такой подход отрицательно влияет на логику обработки данных, провоцирует трудноуловимые ошибки и в конечном счете не облегчает программирование, а наоборот, затрудняет процесс.
Отойти в сторону выполнения преобразующих действий ровно в том месте где они необходимы.

Если что, школу я закончил больше четверти века назад.

Спустя 2 минуты, 20 секунд (19.04.2011 - 16:00) GreatMax написал(а):
Цитата (Trianon @ 19.04.2011 - 12:58)
совет в общем-то такой.
Отойти от идеи превентивной подготовки переменных к укладыванию в SQL, HTML и прочий код, поскольку такой подход отрицательно влияет на логику обработки данных, провоцирует трудноуловимые ошибки и в конечном счете не облегчает программирование, а наоборот, затрудняет процесс.
Отойти в сторону выполнения преобразующих действий ровно в том месте где они необходимы.

Если что, школу я закончил больше четверти века назад.

Спасибо. Самый адекватный ответ во всей теме.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.