[S13L1] Authentication Flashcards
Warum müssen Passwörter von Usern gehashed werden?
-Weil wenn sie in Plaintext gespeichert sind, sie nicht sicher gegen Hackingangriffe sind
Was ist Hashing?
- Eine One-Way-Function, welche mit Mathematik etwas in einen Hash-String verwandelt
- Dieser Hash-String lässt sich nicht mehr zurückrechnen
Was kann man benutzen um Authentication/Hashing zu erreichen?
NPM Package bcrypt
npm i bcryptjs
Wie benutzt man bcrypt zum hashen?
const bcrypt = require(‘bcryptjs’);
//2^12 = 4096 const hash = bcrypt.hashSync(user.password, 12) user.password = hash;
Was ist ein Salt?
- Ein zufälliger String, der dem Password addiert wird bevor beide gehashed werden
- Damit sind Passwörter auch unterschiedlich, wenn mehrere Benutzer das gleiche Passwort wählen
Wie kann man ein Passwort validieren?
const bcrypt = require(‘bcryptjs’);
Users.findBy({ username}) .first() .then(user => { if (user && bcrypt.compaseSync(password, user.password)) { res.status(200).json( { message: 'wecome ${user.username}!' }); } else { res.status(401).json({ message: 'invalid credentials ' }); } }) .catch(error => { res.status(500).json(error) }) });
Wie kann man endpoints mit Authentication restricten?
-Mit Authentication Middleware
Wie sieht eine Authentication Middleware aus?
const bcrypt = require(‘bcryptjs’);
const Users = require(‘../users/users-model.js’);
module.exports = function restricted(req, res, next) {
const { username, password } = req.headers;
if (username && password) { Users.findBy({ username }) .first() .then(user => { if (user && bcrypt.compareSync(password, user.password)) { next(); } else { res.status(401).json({ message: 'invalid credentials ' }); } }) .catch(error => { res.status(500).json(error) }) } else { res.status(400):json({ message: 'Please provide valid credentials' }); } });
Sollte man User Passwörter speichern?
- Am besten man speichert es gar nicht
- Höchstens Salted Hashes
- Ansonsten am besten Dritte für Identitätsmanagement nehmen (Firebase, Oauth etc)
Sollte Encryption of Hashes langsam oder schnell sein?
-Langsamer ist besser, damit das Brute-Forcing lange dauert
Wie schützt man sich gegen Man in the middle attack?
- Man schickt zwischen Server und Client nur so wenig Daten wie möglich
- Man sendet nie das Passwort, den Passwort hash etc zurück, sondern nur authentication tokens