742 lines
21 KiB
Markdown
742 lines
21 KiB
Markdown
# DBOIS Tweefactorauthenticatie - Beheerdershandleiding
|
|
|
|
## Inhoudsopgave
|
|
|
|
1. [Introductie](#introductie)
|
|
2. [Installatie en Configuratie](#installatie-en-configuratie)
|
|
3. [Gebruikers Helpen met 2FA Setup](#gebruikers-helpen-met-2fa-setup)
|
|
4. [Veelvoorkomende Problemen Oplossen](#veelvoorkomende-problemen-oplossen)
|
|
5. [Gebruikers Deblokkeren](#gebruikers-deblokkeren)
|
|
6. [Best Practices](#best-practices)
|
|
7. [Veelgestelde Vragen](#veelgestelde-vragen)
|
|
|
|
---
|
|
|
|
## Introductie
|
|
|
|
### Wat is Tweefactorauthenticatie?
|
|
|
|
Tweefactorauthenticatie (2FA) is een extra beveiligingslaag die vereist dat gebruikers twee vormen van identificatie opgeven bij het inloggen:
|
|
1. **Iets dat ze weten**: hun wachtwoord
|
|
2. **Iets dat ze hebben**: hun telefoon of e-mailaccount
|
|
|
|
### Waarom 2FA Gebruiken?
|
|
|
|
- **Bescherming tegen gestolen wachtwoorden**: Zelfs als iemands wachtwoord wordt gestolen, kan een aanvaller niet inloggen zonder toegang tot de tweede factor
|
|
- **Compliance**: Voldoet aan beveiligingsrichtlijnen en compliance-vereisten
|
|
- **Vertrouwen**: Gebruikers weten dat hun accounts beter beschermd zijn
|
|
|
|
### Beschikbare 2FA Methodes
|
|
|
|
DBOIS ondersteunt twee 2FA-methodes:
|
|
|
|
1. **E-mail OTP (One-Time Password)**
|
|
- Gebruiker ontvangt een 6-cijferige code per e-mail
|
|
- Code is 10 minuten geldig
|
|
- Eenvoudig te gebruiken, geen extra app nodig
|
|
- Geschikt voor gebruikers die niet technisch onderlegd zijn
|
|
|
|
2. **Google Authenticator**
|
|
- Gebruiker installeert een authenticator app op hun smartphone
|
|
- App genereert elke 30 seconden een nieuwe 6-cijferige code
|
|
- Werkt zonder internetverbinding
|
|
- Veiliger dan e-mail (geen afhankelijkheid van e-mailbeveiliging)
|
|
- Apps: Google Authenticator, Microsoft Authenticator, Authy, etc.
|
|
|
|
---
|
|
|
|
## Installatie en Configuratie
|
|
|
|
### Stap 1: Database Migratie Uitvoeren
|
|
|
|
**BELANGRIJK**: Voer eerst een backup uit van uw database voordat u de migratie uitvoert!
|
|
|
|
#### Optie A: Via Command Line
|
|
|
|
```bash
|
|
# Navigeer naar de DBOIS directory
|
|
cd /pad/naar/dbois
|
|
|
|
# Voer de migratie uit
|
|
mysql -u [gebruikersnaam] -p [database_naam] < application/migrations/001_add_two_factor_authentication.sql
|
|
```
|
|
|
|
Vervang:
|
|
- `[gebruikersnaam]` met uw MySQL gebruikersnaam
|
|
- `[database_naam]` met de naam van uw DBOIS database
|
|
|
|
#### Optie B: Via phpMyAdmin
|
|
|
|
1. Log in op phpMyAdmin
|
|
2. Selecteer de DBOIS database
|
|
3. Klik op de "SQL" tab
|
|
4. Open het bestand `application/migrations/001_add_two_factor_authentication.sql` in een teksteditor
|
|
5. Kopieer de gehele inhoud
|
|
6. Plak in het SQL venster van phpMyAdmin
|
|
7. Klik op "Go" of "Uitvoeren"
|
|
|
|
#### Verificatie
|
|
|
|
Controleer of de migratie succesvol was:
|
|
|
|
```sql
|
|
-- Controleer nieuwe kolommen in users tabel
|
|
DESCRIBE users;
|
|
|
|
-- U zou deze kolommen moeten zien:
|
|
-- two_factor_enabled
|
|
-- two_factor_method
|
|
-- two_factor_secret
|
|
|
|
-- Controleer nieuwe tabel
|
|
SHOW TABLES LIKE 'user_otp_codes';
|
|
```
|
|
|
|
### Stap 2: E-mail Configuratie Controleren
|
|
|
|
Zorg ervoor dat de e-mailconfiguratie correct is ingesteld in `application/config/email.php`:
|
|
|
|
```php
|
|
$config['protocol'] = 'smtp';
|
|
$config['smtp_host'] = 'mail.uwdomain.nl';
|
|
$config['smtp_user'] = 'noreply@dbois.nl';
|
|
$config['smtp_pass'] = 'uw_wachtwoord';
|
|
$config['smtp_port'] = 587;
|
|
$config['smtp_crypto'] = 'tls';
|
|
$config['mailtype'] = 'html';
|
|
$config['charset'] = 'utf-8';
|
|
$config['newline'] = "\r\n";
|
|
```
|
|
|
|
**Test de e-mailconfiguratie** door de wachtwoord-vergeten functie te gebruiken.
|
|
|
|
### Stap 3: Link naar 2FA Instellingen Toevoegen
|
|
|
|
Voeg een link toe in het gebruikersmenu zodat gebruikers hun 2FA kunnen beheren:
|
|
|
|
Voorbeeld locatie: In uw hoofdnavigatie of gebruikersprofiel menu:
|
|
|
|
```html
|
|
<li>
|
|
<a href="/beheer/TwoFactorController">
|
|
<i class="icon wb-lock"></i>
|
|
<span>2FA Instellingen</span>
|
|
</a>
|
|
</li>
|
|
```
|
|
|
|
Of in een dropdown menu:
|
|
```html
|
|
<a class="dropdown-item" href="/beheer/TwoFactorController">
|
|
<i class="icon wb-lock"></i> Tweefactorauthenticatie
|
|
</a>
|
|
```
|
|
|
|
### Stap 4: Test de Implementatie
|
|
|
|
1. Log in als testgebruiker
|
|
2. Ga naar `/beheer/TwoFactorController`
|
|
3. Schakel 2FA in met e-mail methode
|
|
4. Log uit en log opnieuw in
|
|
5. Verifieer dat u de OTP code ontvangt en kunt invoeren
|
|
6. Test ook de Google Authenticator methode
|
|
|
|
---
|
|
|
|
## Gebruikers Helpen met 2FA Setup
|
|
|
|
### E-mail OTP Methode Instellen
|
|
|
|
**Stap 1**: Gebruiker gaat naar 2FA Instellingen
|
|
- URL: `/beheer/TwoFactorController`
|
|
- Of via menu: Gebruikersprofiel → 2FA Instellingen
|
|
|
|
**Stap 2**: E-mail methode selecteren
|
|
- Klik op het "E-mail" kaartje
|
|
- Klik op "2FA Inschakelen"
|
|
|
|
**Stap 3**: Bevestiging
|
|
- Gebruiker ziet melding: "Tweefactorauthenticatie ingeschakeld"
|
|
- Pagina toont huidige status: E-mail methode actief
|
|
|
|
**Stap 4**: Testen
|
|
- Log uit
|
|
- Log opnieuw in met gebruikersnaam en wachtwoord
|
|
- Controleer e-mail inbox (en spam folder!)
|
|
- Voer 6-cijferige code in
|
|
- Klik "Verifiëren"
|
|
|
|
**Tips voor gebruikers**:
|
|
- Bewaar de DBOIS e-mail adres (noreply@dbois.nl) in contacten om te voorkomen dat mails in spam terechtkomen
|
|
- Codes zijn 10 minuten geldig
|
|
- Nieuwe code kan worden aangevraagd met "Code opnieuw verzenden"
|
|
|
|
### Google Authenticator Methode Instellen
|
|
|
|
**Stap 1**: Authenticator App Installeren
|
|
- iOS: Download "Google Authenticator" of "Microsoft Authenticator" uit App Store
|
|
- Android: Download "Google Authenticator" of "Microsoft Authenticator" uit Play Store
|
|
- Alternatief: Authy (multi-device ondersteuning)
|
|
|
|
**Stap 2**: 2FA Instellingen Openen
|
|
- Ga naar `/beheer/TwoFactorController`
|
|
|
|
**Stap 3**: Google Authenticator Selecteren
|
|
- Klik op het "Google Authenticator" kaartje
|
|
- Klik op "2FA Inschakelen"
|
|
|
|
**Stap 4**: QR Code Scannen
|
|
- Een QR code verschijnt op het scherm
|
|
- Open de authenticator app op de telefoon
|
|
- Klik op "+" of "Account toevoegen"
|
|
- Selecteer "QR code scannen"
|
|
- Scan de QR code op het scherm
|
|
- DBOIS verschijnt nu in de app met een 6-cijferige code
|
|
|
|
**Stap 5**: Verificatie
|
|
- De 6-cijferige code in de app verandert elke 30 seconden
|
|
- Voer de huidige code in op het verificatiescherm
|
|
- Klik "Verifiëren"
|
|
- Bij succes: 2FA is nu actief
|
|
|
|
**Stap 6**: Testen
|
|
- Log uit
|
|
- Log opnieuw in
|
|
- Open authenticator app
|
|
- Voer de 6-cijferige code in (let op: code verandert elke 30 seconden!)
|
|
- Klik "Verifiëren"
|
|
|
|
**Belangrijk voor gebruikers**:
|
|
- ⚠️ **Bewaar de QR code of secret code veilig** (screenshot maken en veilig opslaan)
|
|
- Als telefoon verloren gaat, kan de QR code gebruikt worden om opnieuw in te stellen
|
|
- Codes zijn 30 seconden geldig
|
|
- Zorg dat de tijd op de telefoon correct is ingesteld (belangrijk voor TOTP!)
|
|
|
|
### Methode Wijzigen
|
|
|
|
Gebruikers kunnen later van methode wisselen:
|
|
|
|
1. Ga naar 2FA Instellingen
|
|
2. Selecteer een andere methode (E-mail of Google Authenticator)
|
|
3. Klik "Methode Wijzigen"
|
|
4. Volg de setup stappen voor de nieuwe methode
|
|
|
|
### 2FA Uitschakelen
|
|
|
|
Als een gebruiker 2FA wil uitschakelen:
|
|
|
|
1. Ga naar 2FA Instellingen
|
|
2. Scroll naar beneden
|
|
3. Klik op rode knop "2FA Uitschakelen"
|
|
4. Bevestig de actie
|
|
|
|
**Let op**: Vanuit beveiligingsperspectief raden we aan om 2FA verplicht te stellen voor beheerders en gebruikers met gevoelige toegang.
|
|
|
|
---
|
|
|
|
## Veelvoorkomende Problemen Oplossen
|
|
|
|
### Probleem 1: E-mail OTP Niet Ontvangen
|
|
|
|
**Diagnose checklist**:
|
|
- [ ] Is de e-mail configuratie correct? (test met wachtwoord-vergeten functie)
|
|
- [ ] Controleer spam/junk folder
|
|
- [ ] Is het e-mailadres van de gebruiker correct in de database?
|
|
- [ ] Controleer applicatie logs voor e-mail fouten
|
|
|
|
**Oplossing A: E-mail Configuratie Controleren**
|
|
|
|
1. Test de e-mail functionaliteit:
|
|
```php
|
|
// In een test controller
|
|
$this->load->library('email');
|
|
$this->email->from('noreply@dbois.nl', 'DBOIS');
|
|
$this->email->to('uw@email.nl');
|
|
$this->email->subject('Test');
|
|
$this->email->message('Test bericht');
|
|
if (!$this->email->send()) {
|
|
echo $this->email->print_debugger();
|
|
}
|
|
```
|
|
|
|
2. Controleer SMTP instellingen in `application/config/email.php`
|
|
3. Controleer firewall/server configuratie voor uitgaande SMTP
|
|
|
|
**Oplossing B: Code Opnieuw Verzenden**
|
|
|
|
1. Gebruiker klikt op "Code opnieuw verzenden" op de verificatiepagina
|
|
2. Check of nieuwe code wordt verzonden
|
|
3. Controleer spam folder
|
|
|
|
**Oplossing C: Tijdelijk Uitschakelen**
|
|
|
|
Als beheerder kunt u 2FA tijdelijk uitschakelen (zie [Gebruikers Deblokkeren](#gebruikers-deblokkeren))
|
|
|
|
### Probleem 2: Authenticator Code Werkt Niet
|
|
|
|
**Meest voorkomende oorzaken**:
|
|
|
|
**A. Tijd Niet Gesynchroniseerd**
|
|
- Authenticator codes zijn tijd-gebaseerd
|
|
- Als de klok van de telefoon niet correct is, werken codes niet
|
|
|
|
**Oplossing**:
|
|
1. Ga naar telefooninstellingen
|
|
2. Schakel "Automatische datum en tijd" in
|
|
3. Of handmatig de juiste tijd instellen
|
|
4. **Voor Android**: In Google Authenticator app → Menu → Instellingen → Tijd correctie voor codes → Synchroniseer nu
|
|
5. Probeer opnieuw in te loggen
|
|
|
|
**B. Verkeerde QR Code Gescand**
|
|
- Mogelijk oude QR code gebruikt
|
|
- QR code van andere account gescand
|
|
|
|
**Oplossing**:
|
|
1. Verwijder het DBOIS account uit de authenticator app
|
|
2. Log in op DBOIS (beheerder schakelt 2FA tijdelijk uit)
|
|
3. Ga naar 2FA instellingen
|
|
4. Schakel 2FA opnieuw in
|
|
5. Scan de nieuwe QR code
|
|
|
|
**C. Te Lang Gewacht met Code Invoeren**
|
|
- Codes zijn 30 seconden geldig
|
|
- Als code bijna verlopen is bij invoeren, kan validatie falen
|
|
|
|
**Oplossing**:
|
|
- Wacht op nieuwe code (elke 30 seconden)
|
|
- Voer code direct in zodra deze verschijnt
|
|
|
|
### Probleem 3: Gebruiker Zit Vast op Verificatiepagina
|
|
|
|
**Symptoom**: Gebruiker blijft hangen op `/login/showVerify2fa`
|
|
|
|
**Diagnose**:
|
|
- Session data mogelijk corrupt
|
|
- Browser cookies geblokkeerd
|
|
|
|
**Oplossing A: Via Browser**
|
|
- Klik op "Annuleren" link onderaan de verificatiepagina
|
|
- Dit redirect terug naar login pagina
|
|
|
|
**Oplossing B: Via Database** (als beheerder)
|
|
```sql
|
|
-- Verwijder actieve sessies voor deze gebruiker
|
|
DELETE FROM ci_sessions
|
|
WHERE data LIKE '%pending_2fa_user_id%';
|
|
```
|
|
|
|
**Oplossing C: Browser Cache Wissen**
|
|
1. Wis browser cookies en cache
|
|
2. Sluit browser volledig
|
|
3. Open opnieuw en probeer in te loggen
|
|
|
|
### Probleem 4: QR Code Wordt Niet Weergegeven
|
|
|
|
**Oorzaken**:
|
|
- JavaScript errors
|
|
- Browser compatibiliteit
|
|
- Netwerk problemen
|
|
|
|
**Oplossing**:
|
|
1. Check browser console voor errors (F12 → Console tab)
|
|
2. Probeer andere browser (Chrome, Firefox, Safari)
|
|
3. Controleer dat JavaScript enabled is
|
|
4. Refresh de pagina (Ctrl+F5 of Cmd+Shift+R)
|
|
|
|
**Alternatief: Handmatige Code Invoer**
|
|
- Onder de QR code staat een tekstuele secret code
|
|
- Deze kan handmatig worden ingevoerd in de authenticator app:
|
|
1. Open authenticator app
|
|
2. Klik "+" → "Enter a setup key"
|
|
3. Voer account naam in: DBOIS
|
|
4. Voer de secret code in
|
|
5. Selecteer "Time based"
|
|
6. Opslaan
|
|
|
|
### Probleem 5: "Ongeldige Verificatiecode" Foutmelding
|
|
|
|
**Mogelijke oorzaken en oplossingen**:
|
|
|
|
**A. Code Verlopen**
|
|
- E-mail codes: 10 minuten geldig
|
|
- Authenticator codes: 30 seconden geldig
|
|
|
|
**Oplossing**: Gebruik een nieuwe/actuele code
|
|
|
|
**B. Typfout**
|
|
- Code incorrect overgetypt
|
|
- Letters gebruikt in plaats van cijfers (O vs 0)
|
|
|
|
**Oplossing**: Zorgvuldig code opnieuw invoeren, gebruik copy-paste voor e-mail codes
|
|
|
|
**C. Meerdere Pogingen**
|
|
- Code al gebruikt
|
|
- Multiple browser tabs/windows
|
|
|
|
**Oplossing**:
|
|
- Voor e-mail: vraag nieuwe code aan
|
|
- Voor authenticator: wacht op nieuwe code
|
|
|
|
**D. Database Problemen**
|
|
- OTP record niet gevonden
|
|
- Session data verloren
|
|
|
|
**Oplossing**: Beheerder reset 2FA (zie volgende sectie)
|
|
|
|
---
|
|
|
|
## Gebruikers Deblokkeren
|
|
|
|
### Scenario 1: Gebruiker Heeft Toegang Tot Telefoon/E-mail Verloren
|
|
|
|
**Situatie**: Gebruiker kan niet inloggen omdat:
|
|
- Telefoon verloren/gestolen/kapot
|
|
- Geen toegang tot e-mail
|
|
- Authenticator app verwijderd
|
|
|
|
**Oplossing: 2FA Handmatig Uitschakelen**
|
|
|
|
#### Methode A: Via Database (Meest Direct)
|
|
|
|
1. Log in op MySQL/phpMyAdmin
|
|
2. Voer deze query uit:
|
|
|
|
```sql
|
|
-- Zoek de gebruiker
|
|
SELECT id, username, email, two_factor_enabled, two_factor_method
|
|
FROM users
|
|
WHERE username = 'gebruikersnaam';
|
|
|
|
-- Schakel 2FA uit voor deze gebruiker
|
|
UPDATE users
|
|
SET
|
|
two_factor_enabled = 'F',
|
|
two_factor_method = NULL,
|
|
two_factor_secret = NULL
|
|
WHERE id = [user_id];
|
|
|
|
-- Verwijder eventuele OTP codes
|
|
DELETE FROM user_otp_codes WHERE user_id = [user_id];
|
|
```
|
|
|
|
3. Gebruiker kan nu inloggen met alleen wachtwoord
|
|
4. Adviseer gebruiker om 2FA opnieuw in te stellen
|
|
|
|
#### Methode B: Via PHP Script
|
|
|
|
Maak een tijdelijk PHP bestand `disable_2fa.php` in de root:
|
|
|
|
```php
|
|
<?php
|
|
// BELANGRIJK: Verwijder dit bestand na gebruik!
|
|
// Alleen voor noodgevallen
|
|
|
|
require_once 'system/core/CodeIgniter.php';
|
|
|
|
$username = 'gebruikersnaam'; // Wijzig dit
|
|
|
|
$CI =& get_instance();
|
|
$CI->load->database();
|
|
$CI->load->model('beheer/User_model');
|
|
|
|
// Haal gebruiker op
|
|
$user = $CI->User_model->getUserByUsername($username);
|
|
|
|
if (!$user) {
|
|
echo "Gebruiker niet gevonden";
|
|
exit;
|
|
}
|
|
|
|
// Update database
|
|
$data = [
|
|
'two_factor_enabled' => 'F',
|
|
'two_factor_method' => NULL,
|
|
'two_factor_secret' => NULL
|
|
];
|
|
|
|
$CI->User_model->update_record($user->id, $data);
|
|
|
|
echo "2FA uitgeschakeld voor gebruiker: " . $username;
|
|
echo "\n<br>Gebruiker kan nu inloggen met alleen wachtwoord";
|
|
echo "\n<br><strong>VERWIJDER DIT BESTAND!</strong>";
|
|
?>
|
|
```
|
|
|
|
Gebruik:
|
|
1. Upload `disable_2fa.php` naar DBOIS root directory
|
|
2. Ga naar `https://uwdomain.nl/dbois/disable_2fa.php`
|
|
3. **BELANGRIJK: Verwijder het bestand direct na gebruik!**
|
|
|
|
### Scenario 2: Massa-Reset (Meerdere Gebruikers)
|
|
|
|
**Situatie**: Na een incident moeten meerdere gebruikers gereset worden.
|
|
|
|
**Oplossing: Bulk Database Update**
|
|
|
|
```sql
|
|
-- Schakel 2FA uit voor alle gebruikers
|
|
UPDATE users
|
|
SET
|
|
two_factor_enabled = 'F',
|
|
two_factor_method = NULL,
|
|
two_factor_secret = NULL;
|
|
|
|
-- Verwijder alle OTP codes
|
|
TRUNCATE TABLE user_otp_codes;
|
|
```
|
|
|
|
**Let op**: Alleen in noodgevallen gebruiken! Vraag gebruikers daarna 2FA opnieuw in te stellen.
|
|
|
|
### Scenario 3: Gebruiker Kan Geen Nieuwe Codes Ontvangen
|
|
|
|
**E-mail Methode**: Oude codes nog steeds verzonden, nieuwe codes komen niet aan
|
|
|
|
**Diagnose**:
|
|
```sql
|
|
-- Controleer actieve OTP codes voor gebruiker
|
|
SELECT * FROM user_otp_codes
|
|
WHERE user_id = [user_id]
|
|
AND used = 'F'
|
|
AND expires_at > NOW()
|
|
ORDER BY created_at DESC;
|
|
```
|
|
|
|
**Oplossing: OTP Codes Wissen**
|
|
|
|
```sql
|
|
-- Verwijder alle OTP codes voor deze gebruiker
|
|
DELETE FROM user_otp_codes WHERE user_id = [user_id];
|
|
```
|
|
|
|
Nu kan gebruiker nieuwe code aanvragen.
|
|
|
|
### Best Practices voor Deblokkering
|
|
|
|
1. **Identificatie Verifiëren**: Zorg dat u de identiteit van de gebruiker verifieert voordat u 2FA uitschakelt
|
|
- Telefonisch contact met bekend nummer
|
|
- In persoon verificatie
|
|
- Via manager/supervisor
|
|
|
|
2. **Documenteer de Actie**: Houd bij wanneer en waarom 2FA werd uitgeschakeld
|
|
```
|
|
[Datum] - 2FA uitgeschakeld voor [gebruiker] - Reden: [telefoon verloren]
|
|
```
|
|
|
|
3. **Tijdelijke Uitschakeling**: Geef gebruiker beperkte tijd om 2FA opnieuw in te stellen
|
|
- Mail de gebruiker met instructies
|
|
- Stel deadline (bijv. 24 uur)
|
|
|
|
4. **Wachtwoord Reset Overwegen**: Als veiligheidsrisico groot is, forceer ook wachtwoord wijziging
|
|
```sql
|
|
-- Dit forceert wachtwoord reset bij volgende login (indien geïmplementeerd)
|
|
UPDATE users SET password_reset_required = 'T' WHERE id = [user_id];
|
|
```
|
|
|
|
---
|
|
|
|
## Best Practices
|
|
|
|
### Voor Beheerders
|
|
|
|
#### 1. Verplicht 2FA voor Gevoelige Accounts
|
|
|
|
Overweeg 2FA verplicht te stellen voor:
|
|
- Alle beheerders
|
|
- Gebruikers met financiële toegang
|
|
- Gebruikers met toegang tot persoonlijke data
|
|
|
|
Implementatie:
|
|
```php
|
|
// In MY_Controller of inlog verificatie
|
|
if ($user->role <= 2 && $user->two_factor_enabled !== 'T') {
|
|
// Redirect naar 2FA setup met melding
|
|
redirect('/beheer/TwoFactorController?required=true');
|
|
}
|
|
```
|
|
|
|
#### 2. Regelmatig OTP Codes Opschonen
|
|
|
|
Voeg een cron job of scheduled task toe:
|
|
|
|
```bash
|
|
# Dagelijks om 03:00
|
|
0 3 * * * curl -s https://uwdomain.nl/dbois/maintenance/cleanup2fa
|
|
```
|
|
|
|
PHP endpoint (`maintenance/cleanup2fa`):
|
|
```php
|
|
public function cleanup2fa() {
|
|
$this->load->model('beheer/UserOtp_model');
|
|
$deleted = $this->UserOtp_model->cleanupExpiredOTPs();
|
|
log_message('info', "2FA Cleanup: {$deleted} expired OTP codes deleted");
|
|
}
|
|
```
|
|
|
|
#### 3. Monitor 2FA Adoptie
|
|
|
|
Track hoeveel gebruikers 2FA hebben ingeschakeld:
|
|
|
|
```sql
|
|
-- 2FA statistieken
|
|
SELECT
|
|
COUNT(*) as total_users,
|
|
SUM(CASE WHEN two_factor_enabled = 'T' THEN 1 ELSE 0 END) as users_with_2fa,
|
|
SUM(CASE WHEN two_factor_method = 'email' THEN 1 ELSE 0 END) as email_method,
|
|
SUM(CASE WHEN two_factor_method = 'authenticator' THEN 1 ELSE 0 END) as authenticator_method,
|
|
ROUND(SUM(CASE WHEN two_factor_enabled = 'T' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) as adoption_percentage
|
|
FROM users
|
|
WHERE archive = 'F';
|
|
```
|
|
|
|
#### 4. Backup Strategie
|
|
|
|
Voor Google Authenticator gebruikers:
|
|
- Adviseer gebruikers om QR code screenshot veilig op te slaan
|
|
- Of secret code op veilige plek te bewaren
|
|
- Overweeg gebruik van Authy (cloud backup functionaliteit)
|
|
|
|
#### 5. Communicatie
|
|
|
|
**Bij Uitrol**:
|
|
- Stuur e-mail aankondiging 1 week van tevoren
|
|
- Organiseer training sessies of demo's
|
|
- Maak instructie video's beschikbaar
|
|
- Bied helpdesk ondersteuning
|
|
|
|
**Ongoing**:
|
|
- Voeg 2FA info toe aan onboarding proces
|
|
- Herinner gebruikers zonder 2FA periodiek
|
|
- Share security awareness tips
|
|
|
|
### Voor Eindgebruikers
|
|
|
|
#### Do's
|
|
✅ Schakel 2FA in voor extra beveiliging
|
|
✅ Gebruik Google Authenticator voor maximale veiligheid
|
|
✅ Bewaar QR code of secret code veilig
|
|
✅ Test 2FA setup direct na instellen
|
|
✅ Update telefoonnummer en e-mail adres in profiel
|
|
✅ Gebruik een app met backup (zoals Authy)
|
|
|
|
#### Don'ts
|
|
❌ Deel nooit uw 2FA codes
|
|
❌ Screenshot QR codes niet in onbeveiligde cloud
|
|
❌ Gebruik geen publieke computers voor 2FA setup
|
|
❌ Negeer niet 2FA waarschuwingen
|
|
❌ Gebruik niet hetzelfde apparaat voor wachtwoord manager én 2FA (voor maximale veiligheid)
|
|
|
|
---
|
|
|
|
## Veelgestelde Vragen
|
|
|
|
### Algemeen
|
|
|
|
**Q: Is 2FA verplicht?**
|
|
A: Dit hangt af van uw organisatie beleid. Standaard is 2FA optioneel, maar beheerders kunnen het verplicht stellen voor specifieke rollen.
|
|
|
|
**Q: Welke methode is veiliger?**
|
|
A: Google Authenticator is veiliger omdat het niet afhankelijk is van e-mailbeveiliging en werkt zonder internetverbinding. E-mail OTP is echter gemakkelijker voor minder technische gebruikers.
|
|
|
|
**Q: Hoelang duren codes?**
|
|
A: E-mail codes zijn 10 minuten geldig. Authenticator codes zijn 30 seconden geldig maar kunnen worden ingevoerd binnen een window van ±30 seconden (voor clock drift).
|
|
|
|
**Q: Wat als ik een nieuwe telefoon krijg?**
|
|
A: Voor authenticator methode: gebruik de opgeslagen QR code of secret code om op nieuwe telefoon in te stellen. Of: schakel 2FA uit, log in, schakel opnieuw in met nieuwe QR code.
|
|
|
|
**Q: Kan ik 2FA overslaan op vertrouwde apparaten?**
|
|
A: Deze functionaliteit is momenteel niet beschikbaar maar staat op de roadmap voor toekomstige updates.
|
|
|
|
### Technisch
|
|
|
|
**Q: Wordt mijn secret code versleuteld opgeslagen?**
|
|
A: De TOTP secret wordt opgeslagen in de database. Voor productie omgevingen wordt aanbevolen database encryptie te implementeren.
|
|
|
|
**Q: Wat gebeurt er met actieve sessies als ik 2FA inschakel?**
|
|
A: Bestaande sessies blijven actief. 2FA wordt alleen gevraagd bij nieuwe logins.
|
|
|
|
**Q: Kan ik zien wie 2FA heeft ingeschakeld?**
|
|
A: Ja, beheerders kunnen dit bekijken via database query:
|
|
```sql
|
|
SELECT username, email, two_factor_enabled, two_factor_method
|
|
FROM users
|
|
WHERE archive = 'F'
|
|
ORDER BY two_factor_enabled DESC;
|
|
```
|
|
|
|
**Q: Hoeveel mislukte 2FA pogingen zijn toegestaan?**
|
|
A: Er is momenteel geen ingebouwde rate limiting. Dit kan worden toegevoegd voor extra beveiliging.
|
|
|
|
### Problemen
|
|
|
|
**Q: Ik zie "Session expired" na 2FA verificatie**
|
|
A: Dit kan gebeuren als de database session te snel vervalt. Check de `ci_sessions` tabel en verhoog eventueel de session timeout in config.
|
|
|
|
**Q: E-mails komen aan in spam**
|
|
A: Vraag gebruikers om noreply@dbois.nl toe te voegen aan hun contacten en as "not spam" te markeren. Controleer ook SPF/DKIM records van uw domein.
|
|
|
|
**Q: Gebruiker ziet witte pagina na QR scan**
|
|
A: Check voor JavaScript errors in browser console. Mogelijk browser compatibiliteit issue - probeer andere browser.
|
|
|
|
---
|
|
|
|
## Ondersteuning en Contact
|
|
|
|
### Bij Problemen
|
|
|
|
1. **Check eerst deze handleiding** voor standaard oplossingen
|
|
2. **Controleer logs**:
|
|
- Application logs: `application/logs/`
|
|
- Server logs: afhankelijk van uw server setup
|
|
3. **Test in andere browser** om browser-specifieke issues uit te sluiten
|
|
4. **Database backup**: Maak altijd eerst een backup voordat u database wijzigingen doorvoert
|
|
|
|
### Escalatie
|
|
|
|
Als probleem niet opgelost kan worden:
|
|
- Contact development team
|
|
- Verstrek: gebruikersnaam, error messages, browser/device info, screenshots
|
|
|
|
### Documentatie Updates
|
|
|
|
Deze handleiding wordt bijgewerkt bij nieuwe features of veelvoorkomende issues. Check regelmatig voor updates.
|
|
|
|
---
|
|
|
|
## Appendix: Database Schema
|
|
|
|
### users tabel (relevante kolommen)
|
|
|
|
```sql
|
|
`two_factor_enabled` VARCHAR(1) NOT NULL DEFAULT 'F'
|
|
-- 'T' = enabled, 'F' = disabled
|
|
|
|
`two_factor_method` VARCHAR(20) NULL DEFAULT NULL
|
|
-- 'email' of 'authenticator'
|
|
|
|
`two_factor_secret` VARCHAR(255) NULL DEFAULT NULL
|
|
-- TOTP secret voor Google Authenticator (Base32 encoded)
|
|
```
|
|
|
|
### user_otp_codes tabel
|
|
|
|
```sql
|
|
CREATE TABLE `user_otp_codes` (
|
|
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
`user_id` INT(11) UNSIGNED NOT NULL,
|
|
`otp_code` VARCHAR(6) NOT NULL,
|
|
`expires_at` TIMESTAMP NOT NULL,
|
|
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
`used` VARCHAR(1) NOT NULL DEFAULT 'F',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_user_id` (`user_id`),
|
|
KEY `idx_expires_at` (`expires_at`),
|
|
CONSTRAINT `fk_otp_user` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
```
|
|
|
|
---
|
|
|
|
**Laatst bijgewerkt**: 2025-10-17
|
|
**Versie**: 1.0
|
|
**Geschreven voor**: DBOIS Beheerders
|