Sicherheit von TypeScript-Anwendungen: Top-10-Schwachstellen für Einsteiger

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

Sicherheit von TypeScript-Anwendungen: Top-10-Schwachstellen für Einsteiger

\n\n

TypeScript ist eine Erweiterung von JavaScript, die statische Typisierung hinzufügt, aber nicht vor klassischen Webschwachstellen schützt. Anfänger verlassen sich oft auf die Strenge der Typen und vergessen dabei die Sicherheit auf Logik- und Datenebene. In diesem Artikel analysieren wir die 10 häufigsten Schwachstellen in TypeScript-Anwendungen mit Codebeispielen und Schutzmethoden.

\n\n

1. XSS (Cross-Site Scripting) durch dangerouslySetInnerHTML

\n

Eines der häufigsten Probleme ist das Einfügen von Benutzer-HTML ohne Bereinigung. In TypeScript tritt dies oft bei der Arbeit mit React oder Angular auf.

\n\n
// ❌ Angreifbarer Code\nfunction UserComment({ comment }: { comment: string }) {\n  return <div dangerouslySetInnerHTML={{ __html: comment }} />;\n}\n\n// ✅ Sichere Variante\nimport DOMPurify from 'dompurify';\n\nfunction SafeComment({ comment }: { comment: string }) {\n  const sanitized = DOMPurify.sanitize(comment);\n  return <div dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}
\n\n

2. SQL-Injection durch String-Abfragen

\n

TypeScript schützt nicht vor SQL-Injection, wenn Sie rohe Strings verwenden. Verwenden Sie immer parametrisierte Abfragen.

\n\n
// ❌ Gefährlich\nconst query = `SELECT * FROM users WHERE email = '${userEmail}'`;\n\n// ✅ Sicher (Beispiel mit Prisma)\nconst user = await prisma.user.findUnique({\n  where: { email: userEmail }\n});
\n\n

3. Unsichere Speicherung von Geheimnissen im Code

\n

API-Schlüssel, Tokens und Passwörter sollten nicht in den Quellcode gelangen. TypeScript wird in JavaScript kompiliert, und alle Zeichenfolgen bleiben lesbar.

\n\n
// ❌ Tun Sie das niemals\nconst API_KEY = 'sk-1234567890abcdef';\n\n// ✅ Verwenden Sie Umgebungsvariablen\nconst API_KEY = process.env.API_KEY;\nif (!API_KEY) throw new Error('API_KEY fehlt');
\n\n

4. NoSQL-Injection (MongoDB)

\n

Bei der Arbeit mit MongoDB über Mongoose oder den Treiber kann versehentlich ein Abfrageobjekt übergeben werden, das die Logik manipuliert.

\n\n
// ❌ Angreifbarer Code\napp.post('/login', async (req, res) => {\n  const user = await User.findOne({ \n    email: req.body.email, \n    password: req.body.password \n  });\n});\n\n// ✅ Sichere Variante\napp.post('/login', async (req: Request, res: Response) => {\n  const { email, password } = req.body;\n  if (typeof email !== 'string' || typeof password !== 'string') {\n    return res.status(400).send('Ungültige Eingabe');\n  }\n  const user = await User.findOne({ email, password });\n});
\n\n

5. CSRF (Cross-Site Request Forgery)

\n

Wenn Ihre Anwendung Cookie-Authentifizierung verwendet, kann ein Angreifer Aktionen im Namen des Benutzers ausführen.

\n\n
// ❌ Fehlender Schutz\napp.post('/transfer', (req, res) => {\n  // Ausführung der Überweisung ohne Quellprüfung\n});\n\n// ✅ Schutz durch CSRF-Token (Beispiel mit csurf)\nimport csrf from 'csurf';\nconst csrfProtection = csrf({ cookie: true });\napp.post('/transfer', csrfProtection, (req, res) => {\n  // Sichere Ausführung\n});
\n\n

6. Prototype Pollution (Verschmutzung von Prototypen)

\n

Beim Zusammenführen von Objekten ohne Prüfung können Prototyp-Eigenschaften überschrieben werden, was zu Schwachstellen führt.

\n\n
// ❌ Gefährlich\nfunction merge(target: any, source: any) {\n  for (const key in source) {\n    target[key] = source[key];\n  }\n}\n\n// ✅ Sicher\nfunction safeMerge(target: Record<string, any>, source: Record<string, any>) {\n  for (const key in source) {\n    if (Object.prototype.hasOwnProperty.call(source, key)) {\n      target[key] = source[key];\n    }\n  }\n}
\n\n

7. Informationsleck durch Fehler

\n

Stack-Traces und Datenbankdetails sollten dem Benutzer nicht angezeigt werden. TypeScript kann aufgrund strenger Typen die Wachsamkeit einschläfern.

\n\n
// ❌ Schlecht\napp.use((err, req, res, next) => {\n  res.status(500).json({ error: err.m                

Blogs

Buchempfehlungen