Смотря что мы выдаем. Может мы выдаем содержимое статьи, с кучей тегов, жирный, начало абзаца, заголовки.... тоже эскейпить правильно?
Это уже из области сферического коня. Я например вывод не эскейплю, только ввод и базу.
А вывод по ситуации.
Собственно это я и сказал
Сравнение ОС действительно неразумно. Зависит от задачи. А вот сравнение подходов к безопасности - очень даже... не даром мелкомягкие с каждой итерацией все ближе и близе к парадигме "все что не разрешено - запрещено". Понятно что на рабочих станциях в чистом виде это неприменимо, но тем не менее - если наблюдать развитие окон с 3.11 (лично я более древних не использовал) то это довольно очевидно.
:) собственно к этому я плавно и клоню... инструмент параноика должен быть надежным.
Часто это излишество - это полезно для логирования изменений, поиска ответственности и т.п.
но не особо помогает в защите от хакера. Ну разве что уведя пароль менеджера ты не сможешь влезть в админ.настройки, но это уже вопросы менеджмента а не безопасной архитектуры.
не совсем понятен смысл такого подхода в контексте безопасности. Раскройте свою мысль плиз.
Не ну это паранойя. Таки да имея исходники скрипта или как минимум его "скелета" проще найти уязвимость, но с другой стороны у самописов этих уязвимостей больше чем у старых проверенных временем КАЧЕСТВЕННЫХ движков. (естественно есть движки которые принципиально уязвимы, и их невозможно вылечить на 100%, но это отдельный разговор, никак не связанный с их возрастом и популярностью.)
паранойя и неудобство. Если у вас безопасный шаблонизатор на регулярках или конечных автоматах, то почему бы и не расставить метки верстальщику? :) Квалификации ему хватит, зато не надо будет разбираться в верстке и понимать где начинаются и заканчиваются повторяющиеся блоки и т.п. Т.е. в хорошем движке верстальщику банально проще довести до ума шаблон, чем программисту или админу.
Ну если используется чистый шаблонизатор, без пхп, то вывод в браузер осуществляется исключительно шаблонизатором, и такие ухищрения не нужны.
Это да, это факт. :)
Вот я тоже так думал раньше :)
А оказывается теперь он должен быть еще и специалистом в информационной безопасности. :)
На сегодняшний день в большинстве случаев именно верстальщик делает шаблон, а не тупо верстку. Многие шаблонизаторы (Smarty не единственный) позволяют сделать шаблон небезопасным и без участия программиста.
Не факт совсем. Просто часть из участников обсуждения сам по себе программист, и поэтому не понимает, как это может быть не понятно, что данные надо фильтровать всегда и т.п.
Ну а часть действительно считают, что безопасность это глупости, и на само деле достаточно сделать форму логина, и все - скрипт безопасен :)
<?php $content = "Hello, World"; ?> <p><?php echo htmlspecialchars($content);?></p>
Ну это уже вопрос формулировок. Спор тут не конструктивен. А вот если ближе к теме, то тогда надо так:
<?php $content = htmlspecialchars("Hello, World"); ?> <p><?php echo $content;?></p>
Чисто к контексте обсуждения видны сразу два важных момента:
1 - эскейпинг данных идет за пределами шаблона. Это не задача шаблона обеспечивать безопасность.
2 - не смотря на то, что в данном конкретном случае мероприятия по безопасности очевидно излишни (эскейпить константу глупо), но мы все равно это делаем, "для порядка и единообразия".
Опыт сравнения подходов "все что не запрещено разрешено" и "все что не разрешено - запрещено" исчисляется десятилетиями, и плюсы и минусы обоих подходов бесспорны :)
Вообще строго говоря должно быть что-то типа:
<?php $out[content] = "Hello, World"; // ************* конец прикладного кода ***** foreach ($out as $k => $v) $out[$k] = htmlspecialchars($v); ?> <p><?php echo $out[content];?></p>
Так отпадает необходимость помнить о ескейпинге постоянно. И это уже позволяет писать прикладной код кодеру а не программисту :)
Ну а вообще как по мне, так простейший шаблонизатор это что-то вроде:
<?php $templ=file_get_contents(баблабла); while (list($var, $param) = each($templ_var)) { $templ=str_replace('{'.$var.'}', htmlspecialchars($param), $templ); } echo $templ; ?>
*кто не понял - не стоит путать сферических коней с реальными :)
Спасибо, рад что советы оказались полезны. Рад что не все флудят, а кто-то делает выводы :)
rtyug, Вы уже всем верстальщикам лекцию об этом прочитали? И все они поверили? Может еще и подробно объяснили ЗАЧЕМ она нужна? :)
Смысл не в том, что можно писать безопасные шаблоны. Смысл в том, что можно написать и не безопасные. Поэтому их нужно проверять. А был бы шаблонизатор на регулярках или на конечных автоматах, то без исполняемого кода, то уязвимых шаблонов просто не могло бы быть...
В принципе это из базовых концептов безопасности. В старину было два чистых подхода. Один в юникс-платформах, второй у винды. "Все что не запрещено - разрешено" и "все что не разрешено - запрещено". Сейчас все немного поменялось, но суть осталась...
В основном. Это если нет заказа на тебя.
Ломать автоматом проще. Намного.
Ну да, это один из подходов. Если взять дешевый китайский корпус и вставить в него нормальную материнку, то все будет работать. Если вставить китайскую дешевую мать в нормальный корпус, то все работает. Вставить китайскую мать в китайский корпус - не работает :)
Но есть и другой подход, который многие тут не рассматривают - взять нормальный корпус и нормальную мать :)
В контексте сайтостроения - некоторые извращенцы не только нормальные шаблоны берут, но и... нормальные движки :)
плюсадын.
mendel добавил 28.01.2011 в 13:33
Так собственно об этом речь и идет. Попробуйте топик с начала прочитать :)
А вот что делать с опасными функциями уже существующих шаблонизаторов? Например доступ из смарти к гет/пут? Выжигать каленым железом на лбу верстальщика запрет пользоваться этими функциями? :)
Ну под рисованием я имел ввиду всю верстку и т.п.
Просто часто у форм есть еще и пхп-код. Вот его то и не стоит верстальщику программировать :)
Zegaldis таки уловил одну из основных мыслей статьи - евреи, не жалейте заварки.
Fearful, есть еще шаблоны построенные на пхп. Тот же вордпресс к примеру - нельзя тупо скачать шаблон, поставить и забыть - ты обязательно должен его перечитать, в поисках гадостей или случайных уязвимостей.
Если шаблоны на Смарти или еще хуже - на голом пхп, то верстальщик ВЫНУЖДЕН думать о безопасности, потому что за него не подумал разработчик.
ГС как раз и не бояться. Чего ему бояться? кто их ломать то будет? :)
А зачем? Не проще ли писать совместимый код? :)
Вот. Собственно одна из базовых мыслёв статьи :)
Хотя опять таки, не только быдлокодер. В принципе любой кодер этого делать не будет.
Два раза вбуллетин ломали, когда я был далеко от почты, и не успевал получать и устававливать обновления. Еще были проблемы с хостером. Ну и еще один раз по дури зашел с небезопасной машины в аську. Собственно это все взломы которые у меня были (в смысле взломы меня :) ), так что чисто по скриптам у меня 100% взломов именно платных поддерживаемых скриптов :)
Ну это чуток другая формулировка, но по сути то он изначально о безопасности подумал, а потом еще раз подумал... А посередине не думал :)
<?php $content = "Hello, World"; ?> <p><?php echo $content;?></p>
В строгом понимании это не шаблонизатор ибо код не отделен от шаблона.
Но в принципе у меня где-то был шаблонизатор в те же пять строк. Так что посыл верный.
Тут такой момент... Заказчик не способен проверить качество работы при приемке. И не всегда тот, кто берет сто баксов за час напишет лучше чем тот кто берет 1 бакс за час.
По его общению. Как правило заказчик код читать не умеет.
Вообще быдлокодер и быдлопрограммер это немного оффтоп. :)
Такие тоже есть. Но это исключение скорее....
Задачу внедрения вредоносного кода решает хакер.
Верстальщик способен лишь допустить ошибку, которая может дать такую возможность хакеру.
Но такую возможность верстальщику дает программист.
Программированием нет, а рисованием - да.
Статей на тему уязвимостей много. Но читают их мало. :)
Ну еще надо добавить "вебмастера, заказывайте кодинг у кодера, а программирование у программиста" это еще девять слов :)
Ну а если серьезно, то сокращенный вариант не для людей, а для роботов.
Совсем недавно отписал человеку (кодеру), что у него XSS. Он сказал, что это ерунда.
Еще слышал от одного разработчика, что увод его куков это мелочи.
Знаю человека, который в свое время отмахнулся, когда ему сказали, что не надо ставить уязвимый скрипт... Он сказал, что мол это не особо важный сайт, и что не страшно если что.
С тех пор как у него через эту уязвимость слили важный сайт лежащий на том же хостинге, он уж так не думает :) В общем список можно продолжать бесконечно, смысл в том, что человек на примерах информацию усваивает лучше.
Должны, но почему-то большинство продуктов этого не проходят.
Вот собственно об этом и статья :)
Доверенному пользователю достаточно побывать на сайте злоумышленника, чтобы под его правами можно было внести изменения. Нельзя проследить, чтобы "доверенный пользователь" всегда выходил из админки закончив все действия, чтобы он паралельно никуда не ходил, чтобы вообще в принципе не ходил по стремным сайтам. (а сайт может быть и вполне приличным, но взломанным). Часто проще просто не допускать уязвимостей :)
Так и не понял комментарий :)
Зачастую, но не всегда. И принимая такое решение, нужно четко отдавать себе отчет о преимуществах и недостатках такого выбора. Можно даже банально не давать доступ к редактированию шаблонов из админки. Разные есть варианты. Но реально это как правило не делают. Ну и шаблоны такие тоже надо как-бы проверять после модификации. Тоже никто не делает обычно. А вдруг дизайнер сверставший тебе дизайн за "отзыв" туда вирус внедрил? Или тупо $_GET использовал? Да мало ли чего он там начудить мог....
Вообще поколупав с десяток чужих скриптов я пришел к трем выводам:
1 - Ой, а ведь это и у меня есть...
2 - Надо таки доводить свой движок до публичного релиза. Задолбался исправлять чужие ошибки.
3 - Стоит поделиться мыслями об этом в популярной форме.
bigdick, не советую.
Просто не советую вообще что-то менять.
Можно и в бан попасть. Они бюрократы жуткие, и можешь и не доказать, что изменял код ты чтобы исправить ИХ косяки, а не для накрутки. Не поверит никто :) Ведь они ж косяков не совершают.