Городской портал города Оленегорск


Насколько разметка безопасна в Drupal 8

  1. Немного истории
  2. Мы проделали большую работу над системой тем
  3. Как работает Twig autoescape в Drupal 8
  4. Что дальше?

Никто не хочет сайт, который можно взломать. Друпал имеет отличная репутация в сфере безопасности и усердно работает над тем, чтобы основные и добавленные модули были безопасны для всех. Одним из наиболее распространенных типов проблем безопасности является межсайтовая скриптовая атака (XSS) , В Drupal 8 мы внесли значительные изменения в систему тем, чтобы уменьшить уязвимости XSS.

межсайтовая скриптовая атака (XSS)

Немного истории

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

Плохой:

напечатать '<a href="/..." title="'. $title.'"> просмотреть узел </a>';

Хорошо:

напечатать '<a href="/..." title="'. check_plain($title).'"> просмотреть узел </a>';

Лучшие практики Drupal 7 предъявляют множество требований к разработчикам и усложняют поддержку безопасного кода. Одна проблема заключается в том, что разработчик не может знать, была ли переменная $ title в примере уже экранирована в другом коде. Если разработчик звонит check_plain () для чего-то, что уже было экранировано с помощью check_plain (), оно будет экранировано дважды. Двойной побег превращает разумную разметку в такую:

<p> Авторские права и копия 2016 года </ p>

в это:

& lt; p & gt; Copyright & amp; copy 2016 & lt; / p & gt;

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

Мы проделали большую работу над системой тем

В Drupal 8 появился новый движок шаблонов прут , Работа по интеграции Twig с Drupal 8 принесла ряд преимуществ, в том числе:

  • Шаблоны - меньше кода, больше разметки.
  • Мы переместили много разметки, которая ранее была собрана в коде модуля в шаблоны. В Drupal 8 вся логика, необходимая для оформления сайта, находится в этих шаблонах (больше нет тема _ * () функции в основном).
  • Twig - это не PHP, поэтому вы не найдете неожиданного SQL-запроса в файле шаблона, снижающего производительность вашего сайта.
  • У Twig есть песочница, предотвращающая доступ шаблона к небезопасным методам на объектах. Вы можете углубиться в данные объекта (отличная функция), но вы не можете удалить узел в шаблоне, выполнив {{node.delete}}.
  • Twig поставляется с возможностью автоматического экранирования текста.

Это последнее преимущество означает, что разработчикам больше не нужно определять, какой вывод небезопасен, и запускать его через check_plain () (или эквивалент Drupal 8, Html :: побег () ).

Как работает Twig autoescape в Drupal 8

Возьмите простой шаблон Twig:

<div> {{variable}} </ div>

Если переменная является строкой, она будет автоматически экранирована. Если шаблон имеет доступ к объекту узла, например, и заголовок печатается с использованием {{node.title}}, он также будет автоматически экранирован.

Однако мы не всегда хотим автоматически экранировать переменные. Например, заголовок печатается в page.html.twig шаблон вроде так:

<header role = "banner"> {{page.header}} </ header>

Переменная {{page.header}} является объектом разметки, созданным система рендеринга , Он не избежал, потому что он реализует MarkupInterface ,

Если вы хотите иметь заголовок формы, который содержит разметку:

$ form ['# title'] = $ this-> t ('Как тебе кофе?');

Элемент #title здесь использует $ this-> t () для генерации переводимой разметки. Возвращает TranslatableMarkup Объект, который также реализует MarkupInterface (как вывод системы визуализации). Это означает, что система рендеринга не будет экранировать этот текст, и браузеры выделят «вы» с акцентом.

Одним из интересных моментов в переводе является то, что английская версия может не нуждаться в разметке, но перевод все же может быть. Например, возможно, что переводчик захочет использовать Тег BDO переключить направление языка. Поскольку все переводы в Drupal 8 являются объектами TranslatableMarkup, разработчикам не нужно беспокоиться о том, содержит ли перевод HTML или нет. Это значительное улучшение по сравнению с предыдущими версиями Drupal, которые не интегрировали переводимые строки с системой рендеринга.

Что дальше?

Автоматическое экранирование в Drupal 8 - отличная функция, которая значительно упрощает разработку защищенных модулей и тем. В следующем посте этой серии будет рассмотрено, что это означает для разработки модулей и, в частности, как разметка должна быть объединена. В Drupal 8 следующий код не работает!

t ('Конкатенация <em> разметки'). ''. t ('objects </ em> не работает.')

Благодаря xjm , jacine а также susanmccormick за ценный вклад в этот пост.

Что дальше?

Новости

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

Футболка рыбалка
Главная   /  Мой блог ← Футболки логотипом armin van buuren   |  В начало  |  Футболка the pirate bay → Качественные футболка рыбалка |

Клевое место рыбалка
Мы предлагаем рыбалку и отдых в уникальном месте Москвы, национальном парке "Лосиный остров"! Нижний пруд Очищенная береговая территория идеально подходит для ловли на удочку, штекер и удобного

Светлые горы рыбалка
«Светлые горы» в Подмосковье - одно из мест, где москвичи, да и гости, могут провести время в свое удовольствие и одновременно с пользой. База расположена неподалеку от столицы. Не нужно далеко

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

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

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

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

Русская рыбалка 3
Игра русская рыбалка 3 - это последняя официальная версия игры, в которой есть одиночный режим. За эту игру не надо платить никаких денег – она абсолютно бесплатна, просто скачиваете ее себе на компьютер

Триал русская рыбалка
триал русская рыбалка Уважаемые рыбаки и гости, фото отчёт за 31.08.2017 года, было произведено зарыбление водоема карпом, общим весом 700 кг, навеска 0.7-1 кг. Всем успехов.

                                                                                                                                               ОЛЕНЕГОРСК 2010 - 2014                                                                                                 

создание сайта - Старт Икс