Schutz vor Sicherheitslücken

Immer wieder wird auf einer weiteren bedeutenden Website eine gravierende Sicherheitslücke bekannt oder sogar ausgenutzt. Das ist unangenehm. Wenn Ihnen die Sicherheit Ihrer Webanwendungen am Herzen liegt, ist das Nette Framework zweifellos die beste Wahl.

Cross-Site Scripting (XSS)

Cross-Site Scripting ist eine Methode, Websites durch das Ausnutzen nicht escapter Ausgaben zu stören. Ein Angreifer kann dann eigenen Code in die Seite einschleusen und dadurch die Seite verändern oder sogar sensible Daten der Besucher erlangen. Der Schutz vor XSS erfordert konsequentes und korrektes Escaping aller ausgegebenen Strings. Vergisst Ihr Entwickler das auch nur ein einziges Mal, kann die gesamte Website kompromittiert sein.

Ein Beispiel für einen Angriff kann sein, einem Benutzer eine veränderte URL unterzuschieben, die Code in die Seite einschleust. Escapt die Anwendung die Ausgaben nicht richtig, wird das Skript im Browser des Benutzers ausgeführt. So lässt sich zum Beispiel dessen Identität stehlen.

https://example.com/?search=<script>alert('Successful XSS attack.');</script>

Das Nette Framework führt die revolutionäre Technologie Context-Aware Escaping ein, die das Risiko von Cross-Site Scripting dauerhaft beseitigt. Sie escapt alle Ausgaben automatisch je nach Kontext, sodass ein Entwickler nichts versehentlich vergessen kann. Ein Beispiel? Ein Entwickler erstellt dieses Template:

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

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

Die Schreibweise {$message} bedeutet die Ausgabe einer Variablen. In anderen Frameworks muss jede Ausgabe ausdrücklich escapt werden, und zwar an jeder Stelle anders. Im Nette Framework muss nichts escapt werden; alles geschieht automatisch, korrekt und konsequent. Setzen wir die Variable $message = 'Width 1/2"', erzeugt das Framework folgenden HTML-Code:

<p onclick="alert(&quot;Width 1\/2\&quot;&quot;)">Width 1/2&quot;</p>

<script>
document.title = "Width 1\/2\"";
</script>

Cross-Site Request Forgery (CSRF)

Bei einem Angriff vom Typ Cross-Site Request Forgery lockt der Angreifer ein Opfer auf eine Seite, die unauffällig im Browser des Opfers einen Request an einen Server ausführt, bei dem das Opfer angemeldet ist. Der Server glaubt, der Request sei vom Opfer gewollt gestellt worden. Unter der Identität des Opfers führt er also ohne dessen Wissen eine Aktion aus. Das kann das Ändern oder Löschen von Daten, das Senden einer Nachricht usw. sein.

Das Nette Framework schützt Formulare und Signale in Presentern automatisch vor dieser Art von Angriff, indem es verhindert, dass sie von einer anderen Domain abgeschickt oder ausgelöst werden. Wenn Sie den Schutz abschalten wollen, verwenden Sie bei Formularen Folgendes:

$form->allowCrossOrigin();

oder ergänzen im Fall eines Signals das Attribut:

use Nette\Application\Attributes\Requires;

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

Dieser Schutz stützt sich auf den Header Sec-Fetch-Site (Fetch Metadata), den der Browser automatisch sendet und der sich auch mit einer XSS-Lücke auf dem Server nicht fälschen lässt. Der Artikel The browser finally solves CSRF beschreibt das ausführlich.

URL-Angriff, Steuerzeichen, ungültiges UTF-8

Verschiedene Begriffe rund um den Versuch eines Angreifers, bösartige Eingaben in Ihre Webanwendung einzuschleusen. Die Folgen können sehr unterschiedlich sein, von beschädigten XML-Ausgaben (etwa nicht funktionierenden RSS-Feeds) bis zum Erlangen sensibler Informationen aus der Datenbank oder von Passwörtern. Die Abwehr besteht in der konsequenten Validierung aller Eingaben auf Byte-Ebene. Und Hand aufs Herz, wie viele von Ihnen tun das wirklich?

Das Nette Framework erledigt das für Sie, automatisch. Sie müssen nichts konfigurieren, und alle Eingaben werden bereinigt.

Session Hijacking, Session Stealing, Session Fixation

Mit der Verwaltung von Sessions sind mehrere Arten von Angriffen verbunden. Ein Angreifer stiehlt entweder die Session-ID oder schiebt dem Benutzer seine eigene unter und erlangt so Zugang zur Webanwendung, ohne das Passwort des Benutzers zu kennen. Er kann dann ohne dessen Wissen beliebige Aktionen in der Anwendung ausführen. Die Abwehr liegt in der richtigen Konfiguration des Servers und von PHP.

Das Nette Framework konfiguriert PHP automatisch. Der Programmierer muss also nicht darüber nachdenken, wie man die Session richtig absichert, und kann sich ganz auf die Entwicklung der Anwendung konzentrieren. Voraussetzung ist allerdings, dass die Funktion ini_set() erlaubt ist.

SameSite-Cookies bieten einen Mechanismus, um zu erkennen, was zum Laden der Seite geführt hat, was für die Sicherheit entscheidend ist.

Das Flag SameSite kann drei Werte haben: Lax, Strict und None (letzterer verlangt HTTPS). Kommt der Request für eine Seite direkt von der Website oder öffnet der Benutzer die Seite durch direkte Eingabe in die Adresszeile oder durch Klick auf ein Lesezeichen, sendet der Browser alle Cookies an den Server (also mit den Flags Lax, Strict und None). Klickt sich ein Benutzer über einen Link von einer anderen Website zur Website durch, werden Cookies mit den Flags Lax und None an den Server übergeben. Entsteht der Request auf andere Weise, etwa durch das Absenden eines POST-Formulars von einem anderen Origin, das Laden in einem iframe, die Verwendung von JavaScript usw., werden nur Cookies mit dem Flag None gesendet.

Nette sendet standardmäßig alle Cookies mit dem Flag Lax.

Version: 4.x