JavaScript-Sicherheit: So schützen Sie Ihre Website vor SQL-Injection und XSS

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

JavaScript-Sicherheit: Schutz vor SQL-Injection und XSS — Der vollständige Leitfaden für Entwickler

\n\n

Haben Sie sich jemals gefragt, warum Hacker Webanwendungen so sehr lieben? Die Antwort ist einfach: Entwickler lassen oft die „Türen“ offen. Die beiden beliebtesten Schlupflöcher sind SQL-Injection und XSS (Cross-Site-Scripting). Auch wenn Sie in JavaScript schreiben, bedeutet das nicht, dass Sie vor Angriffen auf das Backend geschützt sind. In diesem Artikel analysieren wir, wie Sie Schwachstellen erkennen und, vor allem, wie Sie sie mit modernen Sicherheitspraktiken schließen.

\n\n

Warum sollte ein JavaScript-Entwickler über Sicherheit nachdenken?

\n

Viele Anfänger denken: „Ich schreibe Frontend-Code, habe nichts mit Datenbanken zu tun – mir droht keine Gefahr.“ Das ist ein gefährlicher Irrglaube. JavaScript läuft heute überall: auf dem Client (Browser), auf dem Server (Node.js) und sogar in Datenbanken (MongoDB). Das bedeutet, die Verantwortung für die Sicherheit liegt bei Ihnen. SQL-Injection und XSS sind nicht nur langweilige Begriffe aus Lehrbüchern, sondern reale Bedrohungen, die Ihr Projekt zerstören können, indem sie Benutzerdaten stehlen oder Ihre Website zu einer Virenschleuder machen.

\n\n

SQL-Injection: Die unsichtbare Bedrohung für Ihre Datenbank

\n

SQL-Injection ist ein Angriff, bei dem ein Angreifer bösartigen SQL-Code über Eingabefelder (Formulare, URLs, Header) „einschleust“. Wenn Sie Node.js mit PostgreSQL, MySQL oder einer anderen relationalen Datenbank verwenden, sind Sie gefährdet.

\n\n

Wie sieht eine SQL-Injection in JavaScript aus?

\n

Stellen Sie sich vor, Sie haben ein Login-Formular und schreiben die Abfrage so:

\n
// ❌ GEFÄHRLICH: anfällig für SQL-Injection\nconst username = req.body.username;\nconst password = req.body.password;\nconst query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;
\n

Stellen Sie sich nun vor, der Angreifer gibt im Feld username Folgendes ein: admin' --. Die Abfrage wird zu:

\n
SELECT * FROM users WHERE username = 'admin' --' AND password = '';
\n

-- ist ein Kommentar in SQL. Alles danach wird ignoriert. Der Hacker hat sich ohne Passwort als Admin angemeldet. Und wenn er '; DROP TABLE users; -- eingibt? Sie verlieren die gesamte Benutzertabelle.

\n\n

Schutz: Parametrisierte Abfragen (Prepared Statements)

\n

Der beste Schutz vor SQL-Injection ist, Benutzerdaten niemals direkt in die Abfragezeichenfolge einzufügen. Verwenden Sie parametrisierte Abfragen. So geht es in Node.js mit der Bibliothek pg (PostgreSQL):

\n\n
// ✅ SICHER: parametrisierte Abfrage\nconst { Pool } = require('pg');\nconst pool = new Pool();\n\napp.post('/login', async (req, res) => {\n  const { username, password } = req.body;\n  \n  // $1 und $2 sind Platzhalter\n  const query = 'SELECT * FROM users WHERE username = $1 AND password = $2';\n  const values = [username, password];\n  \n  try {\n    const result = await pool.query(query, values);\n    // Ergebnis verarbeiten...\n  } catch (error) {\n    console.error('Abfragefehler:', error);\n  }\n});
\n

Die Bibliothek maskiert die Werte automatisch. Selbst wenn der Angreifer admin' -- übergibt, wird dies als normale Zeichenfolge und nicht als SQL-Befehl interpretiert.

\n\n

Zusätzliche Schutzmaßnahmen

\n
    \n
  • Serverseitige Validierung: Überprüfen Sie Typ und Länge der Eingabedaten. Wenn eine E-Mail erwartet wird, stellen Sie sicher, dass es sich tatsächlich um eine E-Mail handelt.
  • \n
  • Prinzip der geringsten Privilegien: Verwenden Sie in der Anwendung keinen Root-Benutzer der Datenbank. Erstellen Sie einen separaten Benutzer mit Rechten nur für die benötigten Tabellen.
  • \n
  • ORM-Bibliotheken: Verwenden Sie Prisma, Sequelize oder TypeORM. Sie automatisieren die Parametrisierung, aber vergessen Sie nicht, dass auch mit ihnen unsicherer Code geschrieben werden kann (z. B. durch Verwendung von sequelize.query mit Zeichenkettenverkettung).
  • \n
\n\n

XSS (Cross-Site-Scripting): Wenn Ihre Website sich selbst angreift

\n

XSS ist ein Angriff, bei dem ein Angreifer bösartigen JavaScript-Code auf eine Seite einschleust, der

Blogs

Buchempfehlungen