[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность от Бауманки)
vinnie
Здоров! В курсах "PHP Уровень 1,2" и так далее СПЕЦИАЛИСТ фильтрует переменные с помощью strip_tags, хотя ТВИН говорил, что нужна htmlspecialchars) кто же все-таки прав?)



Спустя 1 минута, 31 секунда (3.02.2011 - 00:12) Zerstoren написал(а):
думаю твин. Я как-то пробовал фильтровать стрипом, но чего-то оно не помогло абсолютно...

Спустя 8 часов, 53 минуты, 51 секунда (3.02.2011 - 09:06) Белый Тигр написал(а):
Более безопасен второй вариант. XSS проводится не только с помощью тегов как таковых, так что их вырезка (чем и занимается strip_tags()) решает лишь часть проблемы. К тому же использование данной функции само по себе создаёт кучу проблем, если её применяют, например, для фильтрации форумных сообщений. Хочет пользователь послать html-код - strip_tags() всё под чистую вырежет. А htmlspecialchars() превратит его в безопасный текст. Так что однозначно htmlspecialchars(), и ничего больше.
P.S. Не забываем про ENT_QUOTES

Спустя 54 минуты, 14 секунд (3.02.2011 - 10:00) twin написал(а):
Цитата
СПЕЦИАЛИСТ фильтрует переменные с помощью strip_tags, хотя ТВИН говорил, что нужна htmlspecialchars) кто же все-таки прав?)

Не нужно мне приписывать чужих слов. Я вообще никогда не говорил, что "переменные" нужно "фильтровать". В постановке вопроса уже две ошибки. Во первых, если уж "фильтровать", то никак не переменные, а данные, находящиеся в них. Во вторых - слово "фильтровать" в данном контексте неуместно. Ибо фильтр, это такая хрень, которая что то пропускает, а что то нет. То есть налицо искажение данных. Их нужно не "фильтровать", а обрабатывать должным образом.

Из вопроса не понятно для какой это делается цели.
Для занесения в БД не пойдет ни та, ни другая функция, обрабатывать нужно другими средствами, зависит от используемой СУБД. Для MySQL к примеру mysql_real_escape_string().

Если для защиты от XSS, то Белый Тигр все верно написал, добавить нечего.

Вообще strip_tags() абсолютно никакого отношения не имеет к безопасности, так как нарушает целостность данных. Она хороша в разного рода парсерах и других специфических скриптах.

Спустя 1 месяц, 9 дней, 3 часа, 35 минут, 43 секунды (12.03.2011 - 13:36) vitaly777 написал(а):
Чем плохо фильтровать значения переменных с помощью regexp ?

Спустя 6 минут, 30 секунд (12.03.2011 - 13:42) ApuktaChehov написал(а):
vitaly777 - а смысл, если есть уже готовые функции? Кроме того, regexp довольно медленно работают. К тому же если юзать уже существующие средства для этого, можно гарантировать, что проблем не будет. А если вы допустите ошибку в regexp?

Спустя 43 минуты, 17 секунд (12.03.2011 - 14:25) vitaly777 написал(а):
Цитата (ApuktaChehov @ 12.03.2011 - 10:42)
vitaly777 - а смысл, если есть уже готовые функции? Кроме того, regexp довольно медленно работают. К тому же если юзать уже существующие средства для этого, можно гарантировать, что проблем не будет. А если вы допустите ошибку в regexp?

Плюс, который я нашел для себя это с помощью regexp контролировать
не только значение переменной, но и кол-во символов. ( при условии если я знаю макс. значение, которое может быть )

к примеру логин и пасс, знаю что только лат. буквы и кол-во 8.
что-то не так - false.

зы. Я не противник родных функций в PHP .

Спустя 2 минуты, 58 секунд (12.03.2011 - 14:28) imba написал(а):
vitaly777
тут, в этой теме, скорее всего имеется в виду огромные статьи, или длинные комментарии.
Выводя из БД статью для фильтрации использовать htmlspecialchars, но никак не регулярку, регулярку для проверки логина и пароля. Каждому своё место.

Спустя 7 минут, 10 секунд (12.03.2011 - 14:36) vitaly777 написал(а):
Цитата (imba @ 12.03.2011 - 11:28)
vitaly777
тут, в этой теме, скорее всего имеется в виду огромные статьи, или длинные комментарии.
Выводя из БД статью для фильтрации использовать htmlspecialchars, но никак не регулярку, регулярку для проверки логина и пароля. Каждому своё место.

да, при прочтении ответов, потерял то, о чем спрашивали..

ps. А как относитесь к такой функции как filter_var () ?

Спустя 2 часа, 1 минута, 53 секунды (12.03.2011 - 16:37) Белый Тигр написал(а):
Цитата
А как относитесь к такой функции как filter_var () ?

Без доверия. Во многих фильтрах есть небольшие ошибки которые могут очень дорого обойтись. Например
filter_var('aa\'^a@bbbb.ccc',FILTER_VALIDATE_EMAIL);

вернёт вам адрес aa'^a@bbbb.ccc, хотя по всем правилам должно быть false т.к. есть недопустимые символы.

Спустя 6 минут, 32 секунды (12.03.2011 - 16:44) Семён написал(а):
imba, с каких это пор регулярки у нас медленно работают? Во всех современных frameworkax фильтр переменных завязан именно на них. Что касается автора топика, тут и тот прав и твин, смотря какую задачу преследует скрипт.

Спустя 27 минут, 55 секунд (12.03.2011 - 17:12) imba написал(а):
Семён
Я про скорость и не говорил. =) Я сказал, что "Каждому своё место".

Спустя 1 час, 34 минуты, 27 секунд (12.03.2011 - 18:46) ApuktaChehov написал(а):
Семён - с тех самых как начали применяться в PHP. Как там в других языках не знаю, по этому я говорил только о PHP

Спустя 5 дней, 12 часов, 23 минуты, 25 секунд (18.03.2011 - 07:10) Commander Keen написал(а):
Цитата
... с каких это пор регулярки у нас медленно работают?


Регулярные выражения всегда были медленными. И не важно, какой вы используете язык. Тут стоит оговориться, так как тут нужно знать, для кого или по сравнении с чем они медленны. Для человеческого глаза или для толстой платформы они конечно не будут медленными, но то, что они медленнее всех остальных языковых конструкций для работы со строками - факт.

Вы очень удивитесь разнице процессорного времени (тактов) профилируя сначала штатную функцию (любого языка) для работы со строками (например: перевод символов в верхний регистр), а потом соответствующее регулярное выражение. Почему так происходит?

Регулярные выражения по сути своей - это отдельный язык, (который совсем не обязательно должен быть привязан к другому языку) со своими операторами и константами, что в свою очередь определяет множество операций над строками. Известно, что у "начала" регулярных выражений стоит теория автоматов и формальных языков, то есть понятно, что это по сути и есть язык, со своим алфавитом и синтаксисом. Для того, чтобы "разобрать" синтаксис, нужен синтаксический анализатор (на сленге - "парсер"). Теперь представь, чтобы процессору отработать регулярку, он должен инициализировать парсер, который в свою очередь это выражение и начинает отрабатывать, занимая при этом процессорное время.

Подводя итоги, нужно сказать, что когда люди говорят о том что регулярные выражения "медленные", то имеется ввиду, что они в общем медленнее, чем например функции работы со строками, того-же например языка PHP. Использовать регулярные выражения нужно только тогда, когда очевидного решения обработки строки штатными средствами вы не видите или это затратит гораздо большее время, нежели просто составить очередную, шаблонную регулярку.

Здесь всё очень похоже на рекурсии (в любых языках) - она тоже достаточно часто проигрывает в быстроте и эффективности методам итерации но по совместительству является лучшим средством при работе с динамическими структурами (стеки, очереди и т.п.). Поэтому, мы применяем ее не всегда и не везде и с большой осторожностью. Существует даже так называемое правило Вирта о рекурсиях, которое гласит примерно следующее (на память): - "Когда существует очевидное итерационное решение, рекурсии следует избегать в любом случае."

Спустя 3 часа, 18 минут, 38 секунд (18.03.2011 - 10:28) ИНСИ написал(а):
vinnie вообще мне кажется правильнее было бы понятие: Обе функции разные. Использовать их нужно только тогда, когда они нужны, то есть на своем месте. А "места" бывают разные и задачи тоже!


_____________
Меньше теории, больше практики...
Быстрый ответ:

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