PIN Login
Edit: Niet geheel veilig mits Man-In-The-Middle ook het plaatje kan opvangen.
Als eerste, wie is de Man-In-The-Middle?
Als je gegevens stuurt over een onbeveiligde lijn, dan kan iemand tijdens het versturen van de gegevens deze gegevens onderscheppen. Dit is natuurlijk niet leuk als dit bij inloggen gebeurd, omdat je er dan inloggegevens uitlekken. De Man-In-The-Middle kan deze inloggegevens opnieuw gebruiken.
Wat kun je doen tegen de Man-In-The-Middle?
Nou, eigenlijk niet veel, het enige dat je kunt doen is de gegevens encrypten. Maar dit moet Cliëntside gebeuren. Oplossing: JavaScript. Maar hier zit een nadeel aan: Er zijn mensen die JavaScript uit hebben staan en dan werkt het dus niet.
Dan heb je nog een tweede optie: een beveiligde lijn (HTTPS). Hiervoor heb je echter een certificaat voor nodig en deze kost geld. Als je een goede beveiliging wilt hebben raad ik dit je toch sterk aan!
Nu heb ik zelf een script gemaakt met een Serverside bescherming tegen de Man-In-The-Middle. Nu zul je je afvragen, hoe kan dat, want de gegevens moeten toch eerst naar de server gaan voor je ze Serverside kunt beschermen.
Toch is het mogelijk, door mensen van te voren bepaalde opties te geven (Serverside). Zie het als een PINcode. Je hebt 10 opties: Getallen van 0 tot 9. Nu is een beveiliging met 10 opties natuurlijk niet sterk, je hebt 1/10e kans om het goed te doen, als je gokt. Daarom moet je meerdere getallen invoeren. Hoe meer getallen hoe minder kans op een 'goede gok'.
Het aantal opties is te berekenen met 10^n, waarin n het aantal getallen zijn, dus als je 4 getallen moet in te voeren heb je 10^4 opties, dus 10 000 opties. Dit maakt 1/10 000e kans op een 'goede gok'.
Hoe maak je dan een PIN, zonder dat de Man-In-The-Middle hier iets aan heeft?
Nou, hieronder staat een vereenvoudigde versie van het script dat ik gemaakt heb.
Ik zal het principe uitleggen:
Je maakt een array en vult deze met waarden van 0 t/m 9. Deze gooi je door elkaar.
Nu komt er bijvoorbeeld zoiets uit:
2
3
4
5
6
7
8
9
10
11
12
0 => 4,
1 => 2,
2 => 9,
3 => 0,
4 => 1,
5 => 7,
6 => 3,
7 => 8,
8 => 5,
9 => 6
);
Nu zet je deze d.m.v. de GD Lib. in een plaatje:
De array sla ik op in een Sessie. De Sessie kan De-Man-In-The-Middle niet lezen, want de sessie blijft alleen op de server.
Nu gebruik ik dit plaatje als een <input type="image">. Het voordeel van dit is dat je de precieze plek krijgt doorgestuurd waar de gebruiker klikt (x en y).
Nu vernieuwt de pagina en krijgen wij de coördinaten binnen waar de gebruiker gedrukt heeft. Wij weten nog precies hoe het plaatje eruit zag, wij hebben immers de waarden in de sessie staan.
Nu slaan we het getal, waar de gebruiker op heeft geklikt, op in een sessie-variabele en zo komen kan de gebruiker zoveel cijfers intikken als deze zelf wil.
Ik heb er een voorbeeld bij, let op: Het voorbeeld is veel verder uitgewerkt, de code hieronder is de basis.
#ID: Test
Pass: test123
PIN: 1234
Voorbeeld();
Voorbeeld: http://futronic.awardspace.com/pin.php
Gesponsorde koppelingen
PHP script bestanden
Er zijn 28 reacties op 'Pin login'
Om te reageren heb je een account nodig en je moet ingelogd zijn.
PHP hulp
0 seconden vanaf nu