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?
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?
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?
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?