[S13L1] Authentication Flashcards

1
Q

Warum müssen Passwörter von Usern gehashed werden?

A

-Weil wenn sie in Plaintext gespeichert sind, sie nicht sicher gegen Hackingangriffe sind

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was ist Hashing?

A
  • Eine One-Way-Function, welche mit Mathematik etwas in einen Hash-String verwandelt
  • Dieser Hash-String lässt sich nicht mehr zurückrechnen
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was kann man benutzen um Authentication/Hashing zu erreichen?

A

NPM Package bcrypt

npm i bcryptjs

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie benutzt man bcrypt zum hashen?

A

const bcrypt = require(‘bcryptjs’);

//2^12 = 4096
const hash = bcrypt.hashSync(user.password, 12)
user.password = hash;
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was ist ein Salt?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wie kann man ein Passwort validieren?

A

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)
})
});
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie kann man endpoints mit Authentication restricten?

A

-Mit Authentication Middleware

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie sieht eine Authentication Middleware aus?

A

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' });
}
});
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Sollte man User Passwörter speichern?

A
  • Am besten man speichert es gar nicht
  • Höchstens Salted Hashes
  • Ansonsten am besten Dritte für Identitätsmanagement nehmen (Firebase, Oauth etc)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Sollte Encryption of Hashes langsam oder schnell sein?

A

-Langsamer ist besser, damit das Brute-Forcing lange dauert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie schützt man sich gegen Man in the middle attack?

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly