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

Почти постоянно се съобщава за дупка в сигурността на поредния голям уебсайт или за злоупотреба с такава дупка. Това е неприятно. Ако ви е грижа за сигурността на вашите уеб приложения, Nette Framework със сигурност е най-добрият избор.

Cross-Site Scripting (XSS)

Cross-Site Scripting е метод за нарушаване на уеб страници, който използва необработени изходи. Нападателят може да вмъкне свой собствен код в страницата и по този начин да я промени или дори да получи чувствителни данни за посетителите. Защитата срещу 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} означава отпечатване на променлива. В други framework-ове е необходимо всяко отпечатване да се обработва изрично и дори по различен начин на всяко място. В Nette Framework не е необходимо да се обработва нищо, всичко се прави автоматично, правилно и последователно. Ако зададем на променливата $message = 'Ширина 1/2"', framework-ът ще генерира HTML код:

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

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

Cross-Site Request Forgery (CSRF)

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

Nette Framework автоматично защитава формите и сигналите в presenter-ите от този тип атака. Това става чрез предотвратяване на тяхното изпращане или извикване от друг домейн. Ако искате да изключите защитата, използвайте за формите:

$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 бисквитките предоставят механизъм за разпознаване на това, което е довело до зареждането на страницата. Което е абсолютно ключово за сигурността.

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

Nette по подразбиране изпраща всички бисквитки с флаг Lax.

версия: 4.0