mendel

mendel
Рейтинг
232
Регистрация
06.03.2008
wano-moroz:
Это касается не безопасности, это касается просто самой логики скрипта. (без эскейпинга скрипт не просто "дырявый" а просто напросто "неправильный" ибо вместо HTML мы подаём в шаблон text/plain что неправильно)

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

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

А вывод по ситуации.

wano-moroz:
эскейпинг должен делать шаблонизатор а не ядро и не шаблон
mendel:
эскейпинг данных идет за пределами шаблона.

Собственно это я и сказал

seodude:
вопрос подходов и правда разный, гдето хорошо автоэскейп, гдето без него. это как холивар windows vs linux, ни к чему не приведет, ничего не стоит в общем :)

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

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

:) собственно к этому я плавно и клоню... инструмент параноика должен быть надежным.

sun:
Разделять права админа и менеджеров, хотя многие ленятся это делать, и аккаунт к админке один на 10 отсталых единиц офисного планктона.

Часто это излишество - это полезно для логирования изменений, поиска ответственности и т.п.

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

sun:
Отделять логику записи с выводом формы. Обычно это делается в одном файле и на один и тот же запрос/линк.

не совсем понятен смысл такого подхода в контексте безопасности. Раскройте свою мысль плиз.

sun:
Не использовать популярные движки/скрипты, по возможности.

Не ну это паранойя. Таки да имея исходники скрипта или как минимум его "скелета" проще найти уязвимость, но с другой стороны у самописов этих уязвимостей больше чем у старых проверенных временем КАЧЕСТВЕННЫХ движков. (естественно есть движки которые принципиально уязвимы, и их невозможно вылечить на 100%, но это отдельный разговор, никак не связанный с их возрастом и популярностью.)

sun:
От верстальщиков забирать только html, вставить пару переменных в дизайн не займет много времени.

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

sun:
Не использовать стандартные функции для вывода print и echo, замените их на самописные, чтобы по дефолту отдавали все данные в html escape.

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

sun:
По ту сторону экрана враги, и все, что они вводят в форму потенциально опасно.

Это да, это факт. :)

dma84:
Вообще-то я всегда думал,что задача верстальщика сверстать шаблон на основе дизайна, сделанного дизайнером, а уж как там прогер будет "пихать" данные в шаблон, с помощью Smarty или ещё каких выкрутасов, верстальщика волновать не должно. Нормальному верстальщику вообще должно быть наплевать на проблемы прогера, его задача - вёрстка, кроссбраузерная, прямая, возможно, валидная, но всё же вёрстка.

Вот я тоже так думал раньше :)

А оказывается теперь он должен быть еще и специалистом в информационной безопасности. :)

На сегодняшний день в большинстве случаев именно верстальщик делает шаблон, а не тупо верстку. Многие шаблонизаторы (Smarty не единственный) позволяют сделать шаблон небезопасным и без участия программиста.

kapow_expert:
Те кто флудят сделали их ранее. И вероятно они от Ваших отличаются.

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

Ну а часть действительно считают, что безопасность это глупости, и на само деле достаточно сделать форму логина, и все - скрипт безопасен :)

wano-moroz:

Впрочем ошибся и я, правильнее подобный шаблонизатор выглядел бы даже так.
<?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;
?>

*кто не понял - не стоит путать сферических коней с реальными :)

zuziken:
рекомендую ТС, как ответственного и знающего своё дело человека, очень сильно помог в проекте, за что ему огромные благодарности!!!! пыщ! пыщ! ;)

Спасибо, рад что советы оказались полезны. Рад что не все флудят, а кто-то делает выводы :)

rtyug:
в smarty и других подобных шаблонизаторах есть escape:
http://www.smarty.net/docsv2/ru/language.modifier.escape.tpl

rtyug, Вы уже всем верстальщикам лекцию об этом прочитали? И все они поверили? Может еще и подробно объяснили ЗАЧЕМ она нужна? :)

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

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

Fearful:
В итоге вывод который я вынес за несколько лет, заключается в том что ломают только популярные движки, через известные дыры, и то в 90% случаев это делается на автомате скриптами.

В основном. Это если нет заказа на тебя.

Ломать автоматом проще. Намного.

Fearful:
Не надо брать халявных шаблонов и шаблоны за копейки и все будет хорошо.

Ну да, это один из подходов. Если взять дешевый китайский корпус и вставить в него нормальную материнку, то все будет работать. Если вставить китайскую дешевую мать в нормальный корпус, то все работает. Вставить китайскую мать в китайский корпус - не работает :)

Но есть и другой подход, который многие тут не рассматривают - взять нормальный корпус и нормальную мать :)

В контексте сайтостроения - некоторые извращенцы не только нормальные шаблоны берут, но и... нормальные движки :)

Fearful:
Потому что правильный шаблон должен выглядеть примерно так
...<div>{content}</div>...
все остальное это попытка создать видимость универсальности в CMS в ущерб другим вещам.

плюсадын.

mendel добавил 28.01.2011 в 13:33

seodude:
все очень сомнительно, может быть просто надо делать "автоескейпинг" в шаблонизаторах? чтобы они сразу возвращали фильтрованные данные в места вставки? к такому выводу не приходили?

Так собственно об этом речь и идет. Попробуйте топик с начала прочитать :)

А вот что делать с опасными функциями уже существующих шаблонизаторов? Например доступ из смарти к гет/пут? Выжигать каленым железом на лбу верстальщика запрет пользоваться этими функциями? :)

Tarry:
Хм. Рисованием наверное дизайнеру подобает заниматься. А верстальщик в идеале делает весь клиентский код. То бишь и разметку, и жабаскрипт и всё всё всё. Ну это в идеале конечно.

Ну под рисованием я имел ввиду всю верстку и т.п.

Просто часто у форм есть еще и пхп-код. Вот его то и не стоит верстальщику программировать :)

Zegaldis:
Но в целях экономной экономии наоборот чаще всего и еще похуже бывает🚬

Zegaldis таки уловил одну из основных мыслей статьи - евреи, не жалейте заварки.

Counselor:
Тогда каким же образом он может внести xss или инъекцию через рисунок или html шаблон?
dma84:
Какой-то бред, причём тут верстальщик?
Fearful:
Притом что Smarty.

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

Если шаблоны на Смарти или еще хуже - на голом пхп, то верстальщик ВЫНУЖДЕН думать о безопасности, потому что за него не подумал разработчик.

Stek:
Говносателиты не хотят использовать смарти ?

ГС как раз и не бояться. Чего ему бояться? кто их ломать то будет? :)

Stek:
Ах да, хостинг за 1 бакс не станет пересобирать пхп или ставить нормальную его версию , забыл.

А зачем? Не проще ли писать совместимый код? :)

Stek:
А быдло кодер за 10 баксов о безопасности тоже не думает, печаль.

Вот. Собственно одна из базовых мыслёв статьи :)

Хотя опять таки, не только быдлокодер. В принципе любой кодер этого делать не будет.

Stek:
Господа, вас реально часто , ну или хотя бы раз, ломали на покупном, обслуживаемом софте ? Сдается мне, что все ваши проблемы с безопасностью идут от от "украл, поставил, и так сойдет".

Два раза вбуллетин ломали, когда я был далеко от почты, и не успевал получать и устававливать обновления. Еще были проблемы с хостером. Ну и еще один раз по дури зашел с небезопасной машины в аську. Собственно это все взломы которые у меня были (в смысле взломы меня :) ), так что чисто по скриптам у меня 100% взломов именно платных поддерживаемых скриптов :)

wano-moroz:
Наоборот, кодер думает о безопасности, программист нет. У хорошего программиста просто нет привычек писать потенциально опасный код (он пишет изначально безопасный код, и о безопасности вспоминает только на стадии тестирования, на тот случай если случайно ошибся и упустил где-то какую-то операцию)

Ну это чуток другая формулировка, но по сути то он изначально о безопасности подумал, а потом еще раз подумал... А посередине не думал :)

wano-moroz:
Не бывает таких случаев. Вы заблуждаетесь полагая что "шаблонизатор" это какой-то массивный скрипт на 5 страниц кода, при этом шаблонизатор может быть даже таким
<?php

$content = "Hello, World";
?>
<p><?php echo $content;?></p>

И его использование оправдано всегда. (Если это реальный проект, а не демо-скрипт описывающий как писать говнокод)

В строгом понимании это не шаблонизатор ибо код не отделен от шаблона.

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

Counselor:
В этом случае чему удивляться, получив в итоге дырявый сайт? :)

Тут такой момент... Заказчик не способен проверить качество работы при приемке. И не всегда тот, кто берет сто баксов за час напишет лучше чем тот кто берет 1 бакс за час.

Fearful:
А как определить что имеешь дело с быдлокодером? :)

По его общению. Как правило заказчик код читать не умеет.

Вообще быдлокодер и быдлопрограммер это немного оффтоп. :)

So1:
на вопрос "Который час?" он ответить что то вроде 1296109468 ? Или кто то так ? :)

Такие тоже есть. Но это исключение скорее....

Sano000:
Внедрение вредоносного кода в дизайн - это вообще не то, о чем стоит рассуждать. Если на то пошло, то программисту, который делает вам модуль, гораздо легче это сделать. У него есть и возможность и квалификация, а модули нужны не реже чем дизайн, который часто к тому же правиться по большей части в css.
Так что это просто параноя.

Задачу внедрения вредоносного кода решает хакер.

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

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

Counselor:
Вы считаете, что программированием форм должен заниматься дизайнер или верстальщик?

Программированием нет, а рисованием - да.

Fearful:
Так лучше оформите в статью, где распишите где возникают уязвимости, и как их устранять при получении через POST и GET данных. Потому что написать что вот есть XSS каждый может.

Статей на тему уязвимостей много. Но читают их мало. :)

LEOnidUKG:
Статья ни о чём.
Если говорить коротко: Программисты, задумывайтесь о безопасности в проектах.
Я поместил всю статью в 4 слова.

Ну еще надо добавить "вебмастера, заказывайте кодинг у кодера, а программирование у программиста" это еще девять слов :)

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

Совсем недавно отписал человеку (кодеру), что у него XSS. Он сказал, что это ерунда.

Еще слышал от одного разработчика, что увод его куков это мелочи.

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

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

Stek:
Вообще то для таких вещей есть тестировщики, задача которых находить подобные косяки.

Должны, но почему-то большинство продуктов этого не проходят.

Stek:
с учетом того, что в админке редактируют как правило доверенные пользователи, поэтому ждать от них эксплойтов не очень логично.

Вот собственно об этом и статья :)

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

AlienZzzz:
Так и не понял топик ))))

Так и не понял комментарий :)

Dreammaker:
Это не грешение - это в большинстве своём стандарт, ибо зачастую использование шаблонизаторов просто не оправдано

Зачастую, но не всегда. И принимая такое решение, нужно четко отдавать себе отчет о преимуществах и недостатках такого выбора. Можно даже банально не давать доступ к редактированию шаблонов из админки. Разные есть варианты. Но реально это как правило не делают. Ну и шаблоны такие тоже надо как-бы проверять после модификации. Тоже никто не делает обычно. А вдруг дизайнер сверставший тебе дизайн за "отзыв" туда вирус внедрил? Или тупо $_GET использовал? Да мало ли чего он там начудить мог....

Вообще поколупав с десяток чужих скриптов я пришел к трем выводам:

1 - Ой, а ведь это и у меня есть...

2 - Надо таки доводить свой движок до публичного релиза. Задолбался исправлять чужие ошибки.

3 - Стоит поделиться мыслями об этом в популярной форме.

bigdick, не советую.

Просто не советую вообще что-то менять.

Можно и в бан попасть. Они бюрократы жуткие, и можешь и не доказать, что изменял код ты чтобы исправить ИХ косяки, а не для накрутки. Не поверит никто :) Ведь они ж косяков не совершают.

Всего: 1906