Защита от уязвимостей
То и дело сообщается о дыре в безопасности на очередном крупном сайте или об использовании этой дыры. Это неприятно. Если вам важна безопасность ваших веб-приложений, 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("Ширина 1\/2\"")">Ширина 1/2"</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 cookie
SameSite cookies предоставляют механизм для распознавания того, что привело к загрузке страницы. Что абсолютно необходимо для безопасности.
Флаг SameSite может иметь три значения: Lax
, Strict
и None
(последнее требует HTTPS). Если запрос на страницу поступает
непосредственно с сайта, или пользователь открывает страницу, вводя
адрес напрямую в адресную строку или кликая по закладке, браузер
отправляет серверу все куки (т.е. с флагами Lax
, Strict
и
None
). Если пользователь переходит на сайт по ссылке с другого
сайта, серверу передаются куки с флагами Lax
и None
. Если
запрос возникает другим способом, например, отправкой POST-формы с
другого сайта, загрузкой внутри iframe, с помощью JavaScript и т.д.,
отправляются только куки с флагом None
.
Nette по умолчанию все куки отправляет с флагом Lax
.