Кодер ошибается один раз, программист постоянно. (о безопасности скриптов)

mendel
На сайте с 06.03.2008
Offline
232
#51

wano-moroz, вы закапываетесь в детали.

Я например вообще не эскейплю вывод.

В смысле централизованно не эскейплю.

и метод bbcode2html у меня не в шаблонизаторе заложен.

на уровне ядра я навязываю прикладнику только безопасность.

Хотя если честно рассматриваю вариант сделать два метода передачи данных шаблонизатору - с эскейпом и без.

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

sun, ну именно читабельность кода можно по разному организовывать :)

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

К примеру у меня (как и у многих фреймворков) ссылки по умолчанию обрабатываются как /имя_класса/имя_метода/параметр1/параметрN

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

Ну а на счет:

sun:
Я еще хотел отдельно сказать, хорошо еще использовать обертки для запросов к базе. Тут как раз на уровне инструмента залаживается безопасность.

так это да, это очевидно.... это не только упрощает код, (я с тех пор как написал пару классов для работы с базой, SQL существенно подзабыл :) часто "со словарем" пишу... банально нет практики - все за меня скрипт делает. только узкие места правлю), но еще и принудительно обеспечивает эскейпинг данных.

Шутку любишь над Фомой, так люби и над собой. (с) народ. Бесплатные списки читабельных(!) свободных доменов (http://burzhu.net/showthread.php?t=2976) (5L.com) Сайты, All inclusive. 5* (/ru/forum/962215)
Dreammaker
На сайте с 20.04.2006
Offline
569
#52
mendel:
только ввод и базу.

неверный подход. Этим самым вы уложняете организацию поиска по базе.

mendel
На сайте с 06.03.2008
Offline
232
#53

Dreammaker, чем усложняю? реалэскейпом? так без него работать не будет, не говоря об инъекциях....

Dreammaker
На сайте с 20.04.2006
Offline
569
#54
mendel:
реалэскейпом?

если так, то все ок. Просто речь шла о выводе в хтмл везде, и у подумал уже что вы используете htmlspecialchars перед загоном в базу :)

[Удален]
#55
mendel:
гет/пост эскейпится по умолчанию, "маркеры безопасности" и т.п.

Вот и вы делаете ту самую ошибку которая приводит к краху многие продукты.

Цитируя одну статейку

Данные надо обрабатывать не в зависимости откуда они пришли, а в зависимости куда они уйдут !

Вот я например пишу:
format c:

странно, но сервер на котором работает эта страничка почему-то работает, однако на страничке эта строчка находятся в неизменённом виде. Есть над чем подумать.
mendel
На сайте с 06.03.2008
Offline
232
#56

wano-moroz, в чем ошибка собственно? :)

В том, что нельзя доверять инфе от пользователя?

от эскейпа "для профилактики" краха не будет.

Ну а если данные вызывают специфические действия, то их надо дополнительно фильтровать.

Не вижу противоречий.

mendel добавил 04.02.2011 в 14:44

Да еще к статейке интересный момент.

Как оказалось довольно многие (недавно два скрипта таких встретил) разработчики ленятся проверять подписи у сообщений от платежных систем. Как результат - возможность пополнения счета в сервисе без денег. А если сервис позволяет денежку выводить, то.... то взгреть могут хорошо.

[Удален]
#57
mendel:
В том, что нельзя доверять инфе от пользователя?

В том числе и в этом.

Нет конечно правда что ввод надо проверять, например если мы ждём ввод положительного числа то мы должны проверить (и опять же не фильтровать) пришло число или нет (аналогично и с мылом/адресом/итд)

Другое дело если мы получаем например сообщение для форума. Тут мы не должны ничего фильтровать и ничего эскейпить. Мы просто должны конвертировать эти данные в нужный формат. (htmlspecialchars если мы выводим в браузер, или escape если кидаем в запрос, или ничего не делать если посылаем в библиотеку которая сама эскейпит данные)

mendel:
от эскейпа "для профилактики" краха не будет

Будет и не малый.

mendel
На сайте с 06.03.2008
Offline
232
#58
wano-moroz:
Будет и не малый.

И какой будет? Что вместо хтмл выведется исходный код?

Ну и фиг с ним... зато уязвимости на ровном месте не заработаем.

wano-moroz, мне кажется у нас с вами недопонимание именно в постановке вопроса.

Я говорю о фреймворке, а вы похоже о прикладном скрипте.

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

[Удален]
#59
mendel:
ядро обязано перестраховаться

Вот в этом ваша главная ошибка, ядро оперирует данными а не их представлением (представление это уже забота модулей) т.е за HTML отвечает шаблонизатор, за SQL отвечает либа для работы с БД итд

mendel:
Действия писателя прикладного модуля (который вполне может быть кодером, в терминологии топика) по умолчанию должны быть безопасными

Именно, по этому все они должны оперировать абстрактными данными, а за вывод их в браузер/базу/файлы/итд должен отвечать не каждый модуль (ибо писатель модуля может не знать какие там вообще модули есть) а непосредственно тот что работает с выводом.

mendel:
ядро должно обеспечивать безопасность

Оно её и обеспечит. Оно будет оперировать любыми даже "опасными" данными, и по этому кто бы не писал модуль (и кто бы не забыл ескейпнуть данные) шаблонизатор сделает это за него. А внутри ядра, и в других модулях, по умолчанию будут нефильтрованные данные.

wano-moroz добавил 04.02.2011 в 20:44

mendel:
Ну и фиг с ним

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

mendel
На сайте с 06.03.2008
Offline
232
#60
wano-moroz:
Вот в этом ваша главная ошибка

Ну а Ваша главная ошибка в том, что ищете у меня ошибки. :)

Приведите пример где от такого подхода может быть вред, а не теоретизируйте.

mendel добавил 05.02.2011 в 12:55

И да, это:

wano-moroz:
при заливании в бензобак воды вместо опасного бензина, вред будет

не пример если что :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий