Защита от уязвимостей

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

Межсайтовый скриптинг (XSS)

Межсайтовый скриптинг — это метод взлома веб-страниц, использующий необработанные выводы. Злоумышленник может внедрить в страницу свой собственный код и тем самым изменить страницу или даже получить конфиденциальные данные о посетителях. Защититься от XSS можно только путем последовательной и корректной обработки всех строк. При этом достаточно, чтобы ваш верстальщик всего лишь один раз это упустил, и весь сайт может быть мгновенно скомпрометирован.

Примером атаки может быть подсовывание пользователю измененного URL, с помощью которого мы внедряем в страницу свой код. Если приложение не будет должным образом обрабатывать выводы, оно выполнит скрипт в браузере пользователя. Таким образом, мы можем, например, украсть его личность.

https://example.com/?search=<script>alert('Успешная XSS атака.');</script>

Nette Framework предлагает революционную технологию Context-Aware Escaping, которая навсегда избавит вас от риска Cross-Site Scripting. Все выводы обрабатываются автоматически, и верстальщик не может что-то забыть. Пример? Верстальщик создает этот шаблон:

<p onclick="alert({$message})">{$message}</p>

<script>
document.title = {$message};
</script>

Запись {$message} означает вывод переменной. В других фреймворках необходимо каждый вывод явно обрабатывать, причем в каждом месте по-разному. В Nette Framework не нужно ничего обрабатывать, все делается автоматически, правильно и последовательно. Если мы подставим в переменную $message = 'Ширина 1/2"', фреймворк сгенерирует HTML-код:

<p onclick="alert(&quot;Ширина 1\/2\&quot;&quot;)">Ширина 1/2&quot;</p>

<script>
document.title = "Ширина 1\/2\"";
</script>

Межсайтовая подделка запроса (CSRF)

Атака Cross-Site Request Forgery заключается в том, что злоумышленник заманивает жертву на страницу, которая незаметно в браузере жертвы выполняет запрос на сервер, на котором жертва авторизована, и сервер полагает, что запрос был выполнен жертвой по собственной воле. Таким образом, под личностью жертвы выполняется определенное действие без ее ведома. Это может быть изменение или удаление данных, отправка сообщения и т. д.

Nette Framework автоматически защищает формы и сигналы в презентерах от этого типа атак. Это достигается путем предотвращения их отправки или вызова из другого домена. Если вы хотите отключить защиту, используйте для форм:

$form->allowCrossOrigin();

или в случае сигнала добавьте аннотацию @crossOrigin:

/**
 * @crossOrigin
 */
public function handleXyz()
{
}

В Nette Application 3.2 вы также можете использовать атрибуты:

use Nette\Application\Attributes\Requires;

#[Requires(sameOrigin: false)]
public function handleXyz()
{
}

Атаки URL, управляющие коды, неверный UTF-8

Различные термины, связанные с попыткой злоумышленника подсунуть вашему веб-приложению вредоносный ввод. Последствия могут быть самыми разнообразными, от повреждения XML-выводов (например, неработающие RSS-каналы) до получения конфиденциальной информации из базы данных или паролей. Защита заключается в последовательной обработке всех входов на уровне отдельных байтов. И положа руку на сердце, кто из вас это делает?

Nette Framework делает это за вас, причем автоматически. Вам не нужно ничего настраивать, и все входы будут обработаны.

Перехват сессии, кража сессии, фиксация сессии

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

При этом Nette Framework настраивает PHP автоматически. Программисту не нужно думать, как правильно защитить сессию, и он может полностью сосредоточиться на создании приложения. Однако для этого требуется включенная функция ini_set().

SameSite cookies предоставляют механизм для распознавания того, что привело к загрузке страницы. Что абсолютно необходимо для безопасности.

Флаг SameSite может иметь три значения: Lax, Strict и None (последнее требует HTTPS). Если запрос на страницу поступает непосредственно с сайта, или пользователь открывает страницу, вводя адрес напрямую в адресную строку или кликая по закладке, браузер отправляет серверу все куки (т.е. с флагами Lax, Strict и None). Если пользователь переходит на сайт по ссылке с другого сайта, серверу передаются куки с флагами Lax и None. Если запрос возникает другим способом, например, отправкой POST-формы с другого сайта, загрузкой внутри iframe, с помощью JavaScript и т.д., отправляются только куки с флагом None.

Nette по умолчанию все куки отправляет с флагом Lax.

версия: 4.0