De beveiligingsfouten die Node.js-ontwikkelaars naar productie sturen

Ik heb vorig jaar de code van een startup beoordeeld. De code zag er schoon uit. De tests slaagden.

Toen zag ik deze regel: const query = \SELECT * FROM users WHERE email = '${req.body.email}'``

Dit is een SQL-injectiefout. De startup draaide dit 8 maanden lang in productie. Geen enkele ontwikkelaar of CTO heeft het opgemerkt.

Deze fouten zijn onzichtbaar omdat de code werkt. Het werkt totdat een gebruiker een kwaadaardig commando in een invoerveld typt.

Stop deze 5 veelvoorkomende fouten:

  1. Raw SQL met gebruikersinvoer Gebruik geen template literals voor queries. Dit geeft aanvallers toegang tot je database.
  • Fout: const query = \SELECT * FROM users WHERE email = '${email}'``
  • Goed: Gebruik geparametriseerde queries. const query = 'SELECT * FROM users WHERE email = $1' db.query(query, [email])
  1. Het lekken van geheimen in Git Ontwikkelaars committen vaak .env-bestanden naar repositories. Dit legt je database-URL's en API-sleutels bloot. Voeg .env altijd toe aan je .gitignore-bestand.

  2. jwt.decode gebruiken in plaats van jwt.verify jwt.decode leest alleen de token. Het controleert niet of de token echt is. Iedereen kan een gedecodeerde token vervalsen.

  • Fout: const user = jwt.decode(token)
  • Goed: Verifieer altijd de handtekening. const user = jwt.verify(token, process.env.JWT_SECRET)
  1. Ontbrekende rate limiting op auth-endpoints Zonder rate limiting kunnen aanvallers miljoenen wachtwoorden proberen via brute force. Gebruik een library om inlogpogingen te beperken.
  • Goed: Voeg een limiet toe van 10 pogingen per 15 minuten.
  1. Uitgebreide foutmeldingen Het versturen van ruwe foutmeldingen naar de client helpt aanvallers om je systeem in kaart te brengen. Ze zien je tabelnamen en databasetypes.
  • Fout: res.status(500).json({ error: error.message })
  • Goed: Log de fout intern. Stuur een generieke melding naar de gebruiker. res.status(500).json({ error: 'Something went wrong' })

Voordat je een endpoint naar productie stuurt, stel jezelf één vraag: Wat gebeurt er als een gebruiker onverwachte gegevens stuurt?

Beveiligingsfouten zijn zelden complex. Ze ontstaan wanneer je vergeet na te denken over kwaadwillenden.

Welke beveiligingsfout heb jij in productie gevonden?

Source: https://dev.to/manolito99/the-security-bug-every-nodejs-developer-ships-to-production-49e6