Многие CMS позволяют вставлять JS в материалы/шаблоны в админке, что вы видите в этом плохого?
В этом — ничего, и это именно тот случай, когда нужно использовать сырой вывод. Но это один из немногих use case в сравнении с другими — вывод отдельный компонентов страницы (заголовок, имя, телефон и т.д и т.п).
Что будет, если вы напишете JS-код в WYSIWYG-редакторе (WordPress например)? Правильно, он будет выведен как текст. Точно так же вы указываете шаблонизатору, что вы знаете что делаете и что это сырой HTML, который вы прямо интерполируете в тело страницы.
Во-первых, HTML документация не обязывает нас использовать именно кавычки.
Не обязывает, зато 100% предотвращает XSS во всякого рода . Экономия — 5 байт на каждую кавычку, что несерьёзно.
Появляются еще и апострофы, которые могут быть и частью аттрибута.
… и они тоже должны быть экранированы.
Во-вторых, аттрибуты событий, аттрибут style.
… в которых они также экранируются, так как являются обычными атрибутами тега.
В-четвертых, a href опять же как бы не вышло двойное экранирование амперсанда (urlencode и html).
URL-encoding и HTML никоим образом не пересекаются. Если амперсанд — часть значения переменной (типа ?field=value) — он будет заменён на %26. Если часть URL (?smth&smth) — будет заменён на & что есть верное поведение:
Никто не мешает усложнить логику сеттеров/геттеров. Можно например написать getTitleAttribute(), который будет вызван при попытке доступа к $model->title;
… а потом искать, где в коде этот метод вызывается напрямую, где косвенно. Знаю, проходили. Эта проблема, кстати, в других частях L4 еще глубже, так как есть мнеого способов сделать одно и то же — например:
В isFillable мы проверяем несколько разных способов, которыми может быть обработано массовое назначение. Сначала мы смотрим, установлена ли модель как unguarded, и если это так, то разрешаем назначение. Далее мы проверяем, находится ли атрибут в массиве fillable, тогда мы разрешаем назначение еще раз. Затем вызывается isGuarded, который проверяет, находится ли ключ в массиве guarded, или guarded содержит знак звездочки array('*') (который ставится по умолчанию), тогда мы не разрешаем массовое назначение. Наконец, если fillable пустой, мы возвращаем true, если ключ не начинается с подчеркивания, которое используется для скрытых атрибутов, как это принято и в Rails.
Если находится unfillable-ключ, то мы проверяем, является ли модель totallyGuarded. По сути это значит, что если fillable пустой и guarded содержит знак * (по умолчанию), тогда возникает исключение MassAssignmentException. Это значит, что если вы не измените свойства fillable или guarded, то при попытке вызвать fill будет возникать исключение MassAssignmentExceptions.
. Все это сильно затрудняет поддержку проекта.
Вообще-то PHP-дэвелопер пишет блэйдовский шаблон ПОСЛЕ того, как его сверстали верстальщики.
… который, конечно, больше никогда не меняется. Такой дзэн.
если заведомо известно, что безопасное экранирование побьёт вывод?
Совсем даже не известно. Единственный случай, когда пострадает вывод — это описанный вами вывод в JS. Часто вы генерите JS в шаблоне? Если да — у вас ошибка в архитектуре. Если нет — автоэкрарование [HTML] для вас логичный выход. Для оного достаточно экранировать всего три символа, если совсем лень < & "
Как в Handlebars, да. У Тейлора была отличная возможность сделать будущие проекты безопаснее (хотя бы по части XSS), но он почему-то решил продолжить эту традицию и сделал все наоборот. Никак для «обратной совместимости» с v3…
Об этом я и говорю, если добавлять два дня — сам проект выходит тоже на 2-6 дней по длительности. В моем случае это месяц и больше. Наверное, для лендингов достаточно, но профинансирует ли такая деятельность работу целой команды, оставив запас и для руководителя?
Бывает, конечно же, и сроки срываем. Но я обычно заказчику говорю на день-два срок больше, нежели обещает кто-то из фрилансеров.
У вас, видимо, очень простые проекты (как и следует из статьи дальше) — мне часто приходится добавлять одну-две недели, а иногда месяца к планируемому времени и то в итоге обычно получается с натяжкой.
Меняет в том смысле, что 10 лет спустя не всплывет, что вы когда-то искали «yellow submarine скачать мп3 бесплатно». Ну или еще что-то безобидное :)
Даже если на странице стоит счетчик, он максимум что сможет сделать — связать ваши посещения с другими через постоянную cookie, которую выдал вам где-то на другом сайте. Если у вас стоит умолчательная настройка приватности, по которой куки хранятся вечно — можно связать вместе довольно внушительный временной интервал. Я лично всегда выставляю время хранения кук до закрытия браузера, поэтому «мп3 бесплатно» в поиске и на сторонних сайтах с GA связать можно, а то что было вчера или завтра — уже нет.
Ну, и естественно нужно всегда выходить из Gmail и прочих акков Google, т.к по ним как раз можно связать ваши действия персонально с вами и без всяких кук. У меня для этого отдельный браузер (Chrome ;P), где я постоянно залогинен в google, но кроме него ничем не пользуюсь.
На мой взгляд анимации (да и не только они) в CSS слишком многословны, плюс вы не сможете добавить туда условий и очередей. HTML изначально — гибридный язык контейнеров (взять те же микроформаты) — приходиться свыкнуться с мыслью, что все больше и больше визуальных моментов будут декларироватьс в том числе в разметке.
Нет, я не за style — но для последнего специально придуман CSS.
Сколько у него кулеров и где? Шумят? По моим впечатлениям везде где стоит i7 имеет место чересчур «активное» охлаждение. Даже в моем ноуте (Sager Np9750).
Полгода назад выбирал между Synology, Buffalo и Qnap. В итоге купил последний (TS-219), так как он легко рулится через ssh. Очень похож на разобранную модель — VPN из коробки, DLNA, фото/видео/прочие станции и т.п. Покупкой доволен, разве что с веб-интерфейсом комрады с Тайвани подкачали — слишком гламурный и медленный. А так — работает уже 3 месяца без остановки, даже Dovecot туда поставил, чтобы не хранить компромат во вражеском лагере. Кстати, spindown тоже есть — так что коробка тихая.
Так… к вам ещё не пришли? :) в свете habrahabr.ru/post/222455/#comment_7575857
В этом — ничего, и это именно тот случай, когда нужно использовать сырой вывод. Но это один из немногих use case в сравнении с другими — вывод отдельный компонентов страницы (заголовок, имя, телефон и т.д и т.п).
Что будет, если вы напишете JS-код в WYSIWYG-редакторе (WordPress например)? Правильно, он будет выведен как текст. Точно так же вы указываете шаблонизатору, что вы знаете что делаете и что это сырой HTML, который вы прямо интерполируете в тело страницы.
Не обязывает, зато 100% предотвращает XSS во всякого рода . Экономия — 5 байт на каждую кавычку, что несерьёзно.
… и они тоже должны быть экранированы.
… в которых они также экранируются, так как являются обычными атрибутами тега.
URL-encoding и HTML никоим образом не пересекаются. Если амперсанд — часть значения переменной (типа ?field=value) — он будет заменён на %26. Если часть URL (?smth&smth) — будет заменён на & что есть верное поведение:
Возьмите W3C validator, вбейте туда:
И получите:
… а потом искать, где в коде этот метод вызывается напрямую, где косвенно. Знаю, проходили. Эта проблема, кстати, в других частях L4 еще глубже, так как есть мнеого способов сделать одно и то же — например:
. Все это сильно затрудняет поддержку проекта.
… который, конечно, больше никогда не меняется. Такой дзэн.
Уж что-что, а JavaScript за последние годы только набирает популярность огромными темпами.
Совсем даже не известно. Единственный случай, когда пострадает вывод — это описанный вами вывод в JS. Часто вы генерите JS в шаблоне? Если да — у вас ошибка в архитектуре. Если нет — автоэкрарование [HTML] для вас логичный выход. Для оного достаточно экранировать всего три символа, если совсем лень
< & "
У вас, видимо, очень простые проекты (как и следует из статьи дальше) — мне часто приходится добавлять одну-две недели, а иногда месяца к планируемому времени и то в итоге обычно получается с натяжкой.
Даже если на странице стоит счетчик, он максимум что сможет сделать — связать ваши посещения с другими через постоянную cookie, которую выдал вам где-то на другом сайте. Если у вас стоит умолчательная настройка приватности, по которой куки хранятся вечно — можно связать вместе довольно внушительный временной интервал. Я лично всегда выставляю время хранения кук до закрытия браузера, поэтому «мп3 бесплатно» в поиске и на сторонних сайтах с GA связать можно, а то что было вчера или завтра — уже нет.
Ну, и естественно нужно всегда выходить из Gmail и прочих акков Google, т.к по ним как раз можно связать ваши действия персонально с вами и без всяких кук. У меня для этого отдельный браузер (Chrome ;P), где я постоянно залогинен в google, но кроме него ничем не пользуюсь.
Нет, я не за style — но для последнего специально придуман CSS.
На две дискеты? :)
А чем вы тот же торрент запускаете? Все через консоль?