$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 и Пост массив если он глобальный массив.
Тут проще это сделать функцией
Вот так
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 = ''){ print_r(PostP()); //This function filters an array |
Почему?
К этому классу добавятся позже проверка полей формы, тех же самых входных данных на предмет допустимости их по длине и составу и т.д.
Спустя 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]); а зачем вот эта жесть? классическая клиника еще обычно включает стрип тегс, слава б-гу у вас хоть этого нету :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, то и обрабатывать их надо соответствующим образом. Хотя бы по логике.
Raito-kun, причем тут _REQUEST? Это совершенно отдельный массив. И если данные приходят методом _POST, то и обрабатывать их надо соответствующим образом. Хотя бы по логике.
Спустя 1 минута, 55 секунд (19.04.2011 - 13:21) alex12060 написал(а):
Для фильтрации вполне подойдут 2-3 функции из стандартного набора пхп. Создавать для этого отдельный класс нет смысла. Конечно, если Вам, к пример, нужно использовать глубокую фильтрацию, что-то вытаскивать из ГЕТ и ПОСТ, там, разбивать данные на что-то и так далее, то класс для этого можно создать, а так, не нужно.
Спустя 3 минуты, 52 секунды (19.04.2011 - 13:25) Oyeme написал(а):
Использование классов должно соответствовать логике.
В Вашем случаи Вы будете вызвать каждый раз экземпляр класса.Ради глобального сассива,которого Вы будете использовать практически везде.
В этом случаи функция выполняется намного быстрее.Вы можете так же хранит статический ответ внутри функции.
Правильный подход?Вы можете посмотреть в движках,которые применяет концепцию MVC.
В Вашем случаи Вы будете вызвать каждый раз экземпляр класса.Ради глобального сассива,которого Вы будете использовать практически везде.
В этом случаи функция выполняется намного быстрее.Вы можете так же хранит статический ответ внутри функции.
Правильный подход?Вы можете посмотреть в движках,которые применяет концепцию 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 можно применять к конкретным значениям, но никак не к целому массиву входных параметров.
Единственное, что можно сделать с входными параметрами, так это очистить их от следов магических кавычек, которые, по-хорошему, должны быть уже давно выключены.
Функции 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) | ||
я об этом и написал. что эти функции не могут применяться ни к гет ни к пост ни к реквест. поэтому класс опа изначально бесполезен. но у него есть например трим применяющийся в обоих функциях. |
У меня в основном данные идут в базу. Применю
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- и в прочий код, поскольку такой подход отрицательно влияет на логику обработки данных, провоцирует трудноуловимые ошибки и в конечном счете не облегчает программирование, а наоборот, затрудняет процесс.
Отойти в сторону выполнения преобразующих действий ровно в том месте где они необходимы.
Если что, школу я закончил больше четверти века назад.
Отойти от идеи превентивной подготовки переменных для укладывания в SQL-, HTML- и в прочий код, поскольку такой подход отрицательно влияет на логику обработки данных, провоцирует трудноуловимые ошибки и в конечном счете не облегчает программирование, а наоборот, затрудняет процесс.
Отойти в сторону выполнения преобразующих действий ровно в том месте где они необходимы.
Если что, школу я закончил больше четверти века назад.
Спустя 2 минуты, 20 секунд (19.04.2011 - 16:00) GreatMax написал(а):
Цитата (Trianon @ 19.04.2011 - 12:58) |
совет в общем-то такой. Отойти от идеи превентивной подготовки переменных к укладыванию в SQL, HTML и прочий код, поскольку такой подход отрицательно влияет на логику обработки данных, провоцирует трудноуловимые ошибки и в конечном счете не облегчает программирование, а наоборот, затрудняет процесс. Отойти в сторону выполнения преобразующих действий ровно в том месте где они необходимы. Если что, школу я закончил больше четверти века назад. |
Спасибо. Самый адекватный ответ во всей теме.