Schutz vor Schwachstellen

Immer wieder wird eine Sicherheitslücke auf einer weiteren wichtigen Website gemeldet oder die Lücke wird ausgenutzt. Das ist unangenehm. Wenn Ihnen die Sicherheit Ihrer Webanwendungen wichtig ist, ist das Nette Framework mit Sicherheit die beste Wahl.

Cross-Site Scripting (XSS)

Cross-Site Scripting ist eine Methode zur Kompromittierung von Webseiten durch Ausnutzung unbehandelter Ausgaben. Der Angreifer kann dann eigenen Code in die Seite einschleusen und dadurch die Seite verändern oder sogar sensible Daten von Besuchern erhalten. Gegen XSS kann man sich nur durch konsequente und korrekte Behandlung aller Zeichenketten schützen. Dabei genügt es, wenn Ihr Programmierer dies nur ein einziges Mal vergisst, und die gesamte Website kann auf einen Schlag kompromittiert sein.

Ein Beispiel für einen Angriff kann das Unterschieben einer modifizierten URL an einen Benutzer sein, mit der wir unseren Code in die Seite injizieren. Wenn die Anwendung die Ausgaben nicht ordnungsgemäß behandelt, führt sie das Skript im Browser des Benutzers aus. Auf diese Weise können wir ihm beispielsweise die Identität stehlen.

https://example.com/?search=<script>alert('Erfolgreicher XSS-Angriff.');</script>

Das Nette Framework kommt mit einer revolutionären Technologie Context-Aware Escaping, die Sie für immer vom Risiko des Cross-Site Scriptings befreit. Alle Ausgaben werden nämlich automatisch behandelt, und so kann es nicht passieren, dass ein Programmierer etwas vergisst. Beispiel? Ein Programmierer erstellt dieses Template:

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

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

Die Notation {$message} bedeutet die Ausgabe einer Variablen. In anderen Frameworks ist es notwendig, jede Ausgabe explizit zu behandeln und sogar an jeder Stelle anders. Im Nette Framework muss nichts behandelt werden, alles wird automatisch, korrekt und konsequent erledigt. Wenn wir in die Variable $message = 'Breite 1/2"' einsetzen, generiert das Framework HTML-Code:

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

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

Cross-Site Request Forgery (CSRF)

Der Cross-Site Request Forgery Angriff besteht darin, dass der Angreifer das Opfer auf eine Seite lockt, die unauffällig im Browser des Opfers eine Anfrage an den Server ausführt, auf dem das Opfer angemeldet ist, und der Server annimmt, dass die Anfrage vom Opfer freiwillig ausgeführt wurde. Und so führt er unter der Identität des Opfers eine bestimmte Aktion aus, ohne dass es davon weiß. Es kann sich um eine Änderung oder Löschung von Daten, das Senden einer Nachricht usw. handeln.

Das Nette Framework schützt automatisch Formulare und Signale in Presentern vor dieser Art von Angriff. Und zwar dadurch, dass es deren Senden oder Aufrufen von einer anderen Domain verhindert. Wenn Sie den Schutz deaktivieren möchten, verwenden Sie bei Formularen:

$form->allowCrossOrigin();

oder fügen Sie im Falle eines Signals die Annotation @crossOrigin hinzu:

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

In Nette Application 3.2 können Sie auch Attribute verwenden:

use Nette\Application\Attributes\Requires;

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

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

Verschiedene Begriffe im Zusammenhang mit dem Versuch eines Angreifers, Ihrer Webanwendung schädliche Eingaben unterzuschieben. Die Folgen können sehr vielfältig sein, von der Beschädigung von XML-Ausgaben (z.B. nicht funktionierende RSS-Feeds) bis hin zum Erhalt sensibler Informationen aus der Datenbank oder von Passwörtern. Die Abwehr besteht in der konsequenten Behandlung aller Eingaben auf der Ebene einzelner Bytes. Und Hand aufs Herz, wer von Ihnen macht das?

Das Nette Framework erledigt das für Sie und zwar automatisch. Sie müssen überhaupt nichts einstellen und alle Eingaben werden behandelt.

Session Hijacking, Session Stealing, Session Fixation

Mit der Session-Verwaltung sind gleich mehrere Angriffsarten verbunden. Der Angreifer stiehlt entweder die Session-ID des Benutzers oder schiebt ihm seine eigene unter und erhält dadurch Zugriff auf die Webanwendung, ohne das Passwort des Benutzers zu kennen. Danach kann er in der Anwendung alles tun, ohne dass der Benutzer davon weiß. Die Abwehr besteht in der korrekten Konfiguration des Servers und von PHP.

Wobei das Nette Framework PHP automatisch konfiguriert. Der Programmierer muss also nicht darüber nachdenken, wie die Session korrekt abgesichert wird und kann sich voll auf die Erstellung der Anwendung konzentrieren. Dies erfordert jedoch die aktivierte Funktion ini_set().

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

Das SameSite-Flag kann drei Werte haben: Lax, Strict und None (dieser erfordert HTTPS). Wenn die Anfrage für die Seite direkt von der Website kommt oder der Benutzer die Seite durch direkte Eingabe in die Adresszeile oder durch Klicken auf ein Lesezeichen öffnet, sendet der Browser alle Cookies an den Server (also mit den Flags Lax, Strict und None). Wenn der Benutzer über einen Link von einer anderen Website auf die Website klickt, werden Cookies mit den Flags Lax und None an den Server übergeben. Wenn die Anfrage auf andere Weise entsteht, wie das Senden eines POST-Formulars von einer anderen Website, Laden innerhalb eines Iframes, mittels JavaScript usw., werden nur Cookies mit dem Flag None gesendet.

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

Version: 4.0