[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация пользовательского ввода.
Страницы: 1, 2, 3, 4, 5
Arh
twin
Цитата
Не только ники. Вообще все, что не касается разметки.


Тут тоже самое, вместо того чтобы проверить длину и допустимые символы и остальное, нужно разрешить пользователю в поле "логин" вставить войну и мир? А потом в сообщениях, в комментариях, в указании автора статье, автора темы итд обрабатывать его логин, обрезая до нужной величины и вырезая от туда всякие кракозябры? Каждый раз?

Цитата
Вобщем то делайте как хотите, я просто высказал и аргументировал своё мнение, не более того.

Я понимаю что бывают разные случаи, иногда лучше делать первый вариант, а иногда второй.
А опрос такой, что либо одна крайность, либо другая, либо третья.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
I++
фильтрация данных и валидация разные вещи. Фильтрация должна быть подефолту для всех данных даже валидных.

Вот примерн нубства:

$_POST['cool'] = "1 <script>alert('злыдень');</script>";

if(intval($_POST['cool'])) {
echo 'крутяк у нас число, занесем в базу';
} else {
echo 'не число!';
}


А потом мы решили, что этот cool не имеет никаких дыр потому, что мы его завалидировали, и тут у мы получаем xss на пользовательском выводе. А если придерживаться принципа, что фильтруем все и вся ну кроме int и float значений, их через htmlspecialchars прогонять не требуется. То максимум какой геморой мы получим, так это искажение данных которые ввел пользователь, но не скриптовый инклюдинг, а косяк разраба когда он валидировал данные.

Цитата
Тут тоже самое, вместо того чтобы проверить длину и допустимые символы и остальное, нужно разрешить пользователю в поле "логин" вставить войну и мир


Это уже валидация данных. Чтобы они подходили под наши фетиши типо только английские буковки с циферками, ну еще можно часть китайских иероглифов и чтоб длина была не больше 13 потому, что сотона мой друг.
Цитата

вырезая от туда всякие кракозябры


Вот поэтому я всегда мечтал зарегать ник себе вот такой: 開玩笑मज़ाשמחה
а такие злые люди как ты не дают кракозябры писать :D

А еще просто моразм, это когда пароль должен состоять только из A-Z0-9!@#$%^&*( и все, а чего UTF-8 забанили? может я хочу себе на арабском пароль сделать: ثم قررنا أن هذا ليس

Во вторых ранее было сказано про поиск, если загонять данные отфильтрованные сразу в базу, нужно костылить с <> и другими символами.
В третьих, на подходе html темплейты нативные, там сырые данные вообще фильтровать не нужно. прям из базы дергай со всеми <script>alert('злыдень');</script> жсон енкодом проходи и корми темлейту и он выведет их как текст <script>alert('злыдень');</script> если правильно юзать.
и не нужно всяких извращений с document.write, innerHTML, print
GET
twin
Если честно я в недоумении, мало того что я считаю странным фильтровать каждый раз логин htmlspecialchars, конкретно для логина он вообще не нужен даже на входе, достаточно preg_match проверки на допустимы символы в логине, классически это буквы, цифры ну и еще пара- тройка символов.

ИМХО само собой.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
ABC
Выше почитай про арабские ники. Собственно он все сказал верно, мне нечего добавить.
Только что разве это:
Цитата
— Извините, Ваш пароль используется более 30 дней, необходимо выбрать новый!
— розы
— извините, слишком мало символов в пароле!
— розовые розы
— Извините, пароль должен содержать хотя бы одну цифру!
— 1 розовая роза
— Извините, не допускается использование пробелов в пароле!
— 1розоваяроза
— Извините, необходимо использовать как минимум 10 различных символов в пароле!
— 1грёбанаярозоваяроза
— Извините, необходимо использовать как минимум одну заглавную букву в пароле!
— 1ГРЁБАНАЯрозоваяроза
— Извините, не допускается использование нескольких заглавных букв, следующих подряд!
— 1ГрёбанаяРозоваяРоза
— Извините, пароль должен состоять более чем из 20 символов!
— 1ГрёбанаяРозоваяРозаБудетТорчатьИзЗадаЕслиМнеНеДашьДоступПрямоБляСейчас!
— Извините, этот пароль уже занят!
С сайта http://www.inpearls.ru/

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

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
GET
Да, добавить действительно нечего.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Arh
I++
Цитата
Вот пример нубства:


Ну так и в базу будем писать
(int)$_POST['cool'];

раз уж пишем число :D

Тут вопрос про фильтр.
пользователь -> фильтр -> база -> клиент
или
пользователь -> база -> фильтр -> клиент

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

Но зачем далеко ходить, вот форум, если бы он каждый раз обрабатывал bb коды, а если просмотров тем было бы в разы больше, зачем такая лишняя нагрузка? Тут встаёт вопрос кеширования, сколько файлов получилось бы с каждого сообщения? А если админ решит добавить рейтинг к сообщениям, что каждый + или -, будет пересоздавать кеш или дополнительно к кешу делать еще по запросу? Ради чего всё?

А потом придёт тётя паранойя и мы будет фильтровать еще и кеш, вдруг нубство и где то накосячили.


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
По поводу логинов ИМХО нужно регать по почте или телефону.
А все остальное имя фамилия/псевдоним. И да, я считаю валидация и запреты нужны, зачем нам на форуме чувак, который своим 50 символьным ником будет растягивать дизайн?

user posted image

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
inpost
Arh
word-wrap:break-words;
И не благодари laugh.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
twin
Arh
Цитата
Если говорить про "нубство", то вероятнее забыть поставить фильтр при выводе содержимого (которое может выводиться в разных скриптах много раз), чем при сохранении содержимого один раз.
Ты когда последний раз брался голыми руками за электрический провод? Чет тут никто не забывает. А ведь столько вероятностей...

Цитата
И да, я считаю валидация и запреты нужны, зачем нам на форуме чувак, который своим 50 символьным ником будет растягивать дизайн?
Ну да, еще антимат поставим, про политику фильтр, про сиськи... и заживем долго и счастливо.

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

Цитата
Тут встаёт вопрос кеширования, сколько файлов получилось бы с каждого сообщения?
Зачем обязательно файлы. Есть динамическое кэширование допустим. Да и еще куча способов снизить нагрузку, которая по большому счету не так уж и велика.

А теперь посмотри на это с другой стороны. Допустим тег [quоte][/quоte] занимает 15 байт, а "отфильтрованный" (аж передернуло) на нашем форуме сам посчитай:
<!--QuoteBegin--></div><table border=0 align=center width=95% cellpadding=3 cellspacing=1><tr><td><b>Цитата</b> </td></tr><tr><td id=QUOTE><!--QuoteEBegin--><!--QuoteEnd--></td></tr></table><div class=postcolor><!--QuoteEEnd-->

На сколько распухает база, если это один из самых популярных тегов? Плюс всякие &lt; &gt; и иже с ними. Плюс время на обратное преобразование, если учитывать кнопку user posted image к примеру или другое редактирование. Плюс поиск, коим пользуются не так уж редко. Плюс возможные глюки. Плюс, плюс, плюс. Тут еще сильно посчитать нужно выгоду.
Не всё то золото, что блестит.

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

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
I++
Цитата
Понятно что выводом должен заниматься один метод, но а что если изначально метод не умеет сортировать по рейтингу и дядя Вася решил написать свой? Это всё разговоры про нубство.


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


Цитата
Ну так и в базу будем писать

(int)$_POST['cool'];

раз уж пишем число biggrin.gif


Не всегда так пишут, в этом и проблема.

Цитата
Тут вопрос про фильтр.


пользователь -> база -> фильтр -> клиент

Потому, что если пьяный Вася будет использовать схему пользователь -> фильтр -> база -> клиент
вероятность того, что он промахнется в своих изысканиях - велик.

----
Фильтрация и валидация данных по сути разные вещи, фильтрация избавляет нас от потенциальных трипперов превращая все в сущности которые не будут интерпретированы как код и не будет нарушена структура. Валидация же, это набор наших хотелок, например для социальной сети. Возраст: от 12 до 200 лет, имя от 3 до 10 символов китайской иероглифики. Ну или там размер члена от 10см до 100см, а все у кого меньше 10 не могут регистрироваться и вот после всех этих валидаций, делается конкурс у кого самый длинный, но Вася при кодинге допустил ошибку валидации размеров члена и нашелся хацкер Петя, который посмотрел, что вася просто валидирует число ли пришло или нет и петя пишет 100500 и он первый в рейтинге smile.gif
В данном случае возникает логическая ошибка, но никак не уязвимость с нарушением структуры данных.

Цитата
И да, я считаю валидация и запреты нужны, зачем нам на форуме чувак, который своим 50 символьным ником будет растягивать дизайн?


Валидация конечно нужна, если пользовательский ввод может нарушить логику приложения, выше я описал, что ожидался диапазон от 10 до 100, а тут 100500 неожиданно.
Arh
inpost
Так и знал, кто нибудь да напишет это, только это не спасёт =)

twin
Цитата
Ты когда последний раз брался голыми руками за электрический провод? Чет тут никто не забывает. А ведь столько вероятностей...

В том то и дело что проще выключить рубильник и работать со всеми проводами как удобней, чем с каждым проводом под напряжением.

Цитата
Ну да, еще антимат поставим, про политику фильтр, про сиськи... и заживем долго и счастливо.

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

Цитата
Допустим тег [quоte][/quоte] занимает 15 байт

Ну это на форуме. А везде давно <blockquote>, разница не особо что [ b ] что <b>

Цитата
Зачем обязательно файлы. Есть динамическое кэширование допустим. Да и еще куча способов снизить нагрузку, которая по большому счету не так уж и велика.

А как? В оперативке сообщения хранить?

Цитата
Плюс время на обратное преобразование

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


I++
Цитата
Вася должен знать


Ну тогда Вася знает что так делать нельзя
$_POST['cool'] = "1 <script>alert('злыдень');</script>";

if(intval($_POST['cool'])) {
echo 'крутяк у нас число, занесем в базу';
} else {
echo 'не число!';
}

И вообще Вася читает любую документацию и на него все молятся =)

Цитата
Не всегда так пишут, в этом и проблема.

Вася пишет, он же всё знает =)

Цитата
Потому, что если пьяный Вася будет

Да блин, ты пишешь что Вася должен выводить данные через фильтр, типа так должно быть, типа нефиг быть нубом, а потом пишешь, что вдруг нуб.
Вероятность как раз больше что он забудет отфильтровать перед шаблоном.
Потому что часть пользователь -> фильтр ->база сделал ты, а остальные части база -> клиент в разных скриптах делает Вася или пьяный ты и еще кто.

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

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