[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Фильтрация пользовательского ввода.
Страницы: 1, 2, 3, 4, 5
I++
В общем опрос. Под фильтрацией я имею ввиду, специальные символы которые могут привести к разным интересным уязвимостям. smile.gif
GET
2, но иногда, редко можно и 1. smile.gif

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
twin
Мое мнение про "фильтрацию", если интересно.

Что касается htmlspecialchars, тут два расхожих мнения. Из соображений безопасности, подготавливать данные нужно непосредственно перед выводом. Другими словами защищать клиента от сервера, а не сервер от клиента. При правильной работе с данными ничего он сделать не сможет.

Однако это требует дополнительных ресурсов, если используются к примеру bb-теги. Преобразовывать их в HTML придется для каждого вывода против одного раза при записи. И тут многие на свой страх и риск загоняют подготовленный текст в базу. Тут есть еще один момент - обратное преобразование. Не всегда это можно сделать корректно.

Лично мое мнение - нельзя экономить на безопасности. Можно поискать другие пути - кэширование к примеру или оптимизировать обработку. Но выдавать юзеру сырой текст - брать на себя лишнюю ответственность.

Справедливости ради - наш форум работает по второй схеме. Тут стойкое убеждение FatCat. smile.gif



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

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

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

user posted image
AllesKlar
ээээ .. что значит фильтровать?


_____________
[продано копирайтерам]
Hello
AllesKlar
подвергать проверке, отбору

_____________
VPS от 5$, первые 2 месяца - бесплатно.
Игорь_Vasinsky
вариант 2, ибо нехер из < делать &lt; - тем самым раздувая базу.
а перед вводом можно буянить скока угодно.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Guest
twin
Цитата
И тут многие на свой страх и риск загоняют подготовленный текст в базу.


Какой страх и риск загнать строку обработанную mysql_real_escape_string(htmlspecialchars($str))? Ну, конечно кроме мусора, который может появится?
Игорь_Vasinsky
Guest
Цитата
Ну, конечно кроме мусора

или для тебя это в порядке вещей?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
GET
Цитата
Guest
Цитата
Ну, конечно кроме мусора

или для тебя это в порядке вещей?


Игорь_Vasinsky

Ну конечно нет, но разговор идет конкретно о безопасности.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
GET
twin
Почитал по ссылке, про страх и риск... ну если ломанули БД, тогда уже поздно будет что-то фильтровать, ИМХО. Мне вот интересно "ники" на форуме тоже каждый раз проходят через
$login=htmlspecialchars($db['login']);//ABC?

следуя твоей логике. Все проходит через htmlspecialchars, что находится в полях varchar/char?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
I++
Ломанули БД? плейсхолдеры, как ваниш, просто добавь воды и досвидос sqlinj :P

mysql_real_escape_string придумал сотона, сжечь ведьму.

А html5 template + php json_encode = прощай навсегда xss.

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

Поэтому даже если программист упорится и завалидирует чего вот так:

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

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


то вообще нефига не произойдет.
Arh
twin

Тоже почитал.
Каждый раз обрабатывать html, ради того, что бы обезопасить пользователей от редиректа в случае полной утери контроля над сайтом. Как то, мм никак.
Если уж получили доступ к базе, там такого наворотить могут по мимо перинаправления на порнуху.

Было еще одно объяснение, почему стоить обрабатывать html после записи в базу.
Типа допустим: "вот я сейчас вырезаю картинки из статей, а потом вдруг решу не вырезать".
Ну так пользователь оформлял статьи которые писал по старым правилам, теги которые в них раньше не работали не должны вдруг заработать.

Как быть в случае с комментариями или чатом или сообщениями в теме форумов или допустим в личных сообщениях.
Кешировать каждое сообщение в свой файл? Не, ну ладно если просто htmlspecialchars, она не такая уж гигантская что бы её кешировать, но в случае со сложным оформлением типа ссылку на картинку сделать картинкой, или ссылку на видео с ютуба сделать плеером, плюс допустим теже bb коды, плюс какую нибудь фильтрацию матершины. А еще каждый раз обрабатывать кучу условий, например если у юзера ID == 1 или ID группы == 2, то не применять фильтрацию матершины, а юзерам с группы 1 разрешить вставлять js.
Да как это вообще делать? Смотреть ID автора статьи/комментария/сообщения, сделать запрос на группы в которых он состоит, проверить можно ли ему материться, убедится что нельзя, отфильтровать мат и так в цикле? Или лучше 1 раз перед сохранением в базу?

Когда учителя детям ставят двойки в дневник, они же не ставят их карандашом с понтом "а вдруг ему понадобиться исправить 2 на 3, перед тем как показать дневник родителям" =)
Или человеку запрещено курить, вместо того что бы проверить нет ли у него сигарет и отобрать если есть, мы каждый раз одеваем противогазы на всех окружающих.
Или человеку нельзя ругаться матом, вместо того что бы запретить лично ему, один единственный раз, мы каждый раз закрываем уши всем прохожим "а вдруг он сейчас скажет что то нехорошее".

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (ABC @ 18.11.2014 - 14:28)
twin
Почитал по ссылке, про страх и риск... ну если ломанули БД, тогда уже поздно будет что-то фильтровать, ИМХО.

Не особо внимательно читал. Одно дело, когда ты знаешь, что ломанули. Поднял бэкапы и все. Другое, когда это висит долго и потом стрельнет. Потеряешь кучу актуальных данных или ручками, ручками...
Цитата
Мне вот интересно "ники" на форуме тоже каждый раз проходят через
$login=htmlspecialchars($db['login']);//ABC?

следуя твоей логике. Все проходит через htmlspecialchars, что находится в полях varchar/char?
Не только ники. Вообще все, что не касается разметки. Данные в базе - это не разметка, это данные. А они искажаться не должны никак. Есть много причин. Перенос данных на другую систему, обратное преобразование, поиск и т.д. Разметка должна находиться в шаблонах или преобразователях. Все остальное перед выводом в поток обрабатывается обязательно, а хранится в девственно чистом виде.

I++
Цитата
Ломанули БД? плейсхолдеры, как ваниш, просто добавь воды и досвидос sqlinj :P
Эх... Было бы все так просто.

Arh
Цитата
Если уж получили доступ к базе, там такого наворотить могут по мимо перинаправления на порнуху.
Что именно, если в поток идет подготовленный текст?

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



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

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

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

user posted image
DedMorozzz
и 1 и 2


_____________
Если не говорить пользователям, что Linux это "Сложно и страшно", то им совершенно всё равно, в чём не разбираться
Arh
twin
Цитата
Не особо внимательно читал. Одно дело, когда ты знаешь, что ломанули. Поднял бэкапы и все.

Цитата
Что именно, если в поток идет подготовленный текст?


Да что угодно, допустим этот форум.
Поменять все твои старые посты на какую нибудь ахинею =)
Пройдёт год, пройдёт два, может ты и заметишь потом, но твоя репутация как специалиста упадёт в минус 100500 мильёнов, как тут бекап поможет?

Или взять ну я не знаю хабр тот же и провернуть этот трюк там.
Так же поменять ссылки, какая разница что в базе они лежат как необработанные bb коды, внутри то ссылки на сайты и картинки лежат ссылками.
Или взять системы где есть баланс, написать себе в поле 2к и вывести. Сегодня, завтра, после завтра.

Или тупо карму менять всем в минус от разных пользователей, чтоб все пересрались. Пока FatCat одумается, тут уже ад начнётся =)
Да и на сколько я слышал в том же MODX код модулей храниться в базе данных.

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

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