Ik wil graag duidelijkheid. Ik gebruik al een poosje sha256 hash methode + salt en dat bevalt mij prima. Ik heb van meerdere mensen gehoord dat dat veilig genoeg is. Echter hoor ik ook mensen die zeggend dat sha256 absoluut niet veilig is en dat je per se bcrypt moet gebruiken omdat anders je webapplicatie heel makkelijk te hacken is.
Ik weet het dus niet meer. Kan iemand mij dus vertellen wat echt beter is? En dan graag niet alleen je mening ook graag bewijs. En als de een beter is, is de andere dan per definitie slecht en onveilig?
Bon, maar de hacker gaat de hash aanvallen met rainbow-tables, dat zijn lange lijsten van woorden en kreten die mensen vaak gebruiken. Als jouw wachtwoord is "oliebol" en je salt is "563" zodat de hash wordt gemaakt van "oliebol563" dan hoeft een hacker de rainbow tabel maar 563 keer te proberen om jouw wachtwoord te vinden.
Iets met een klok en een klepel die de plank misslaan. ;-)
Een salt is er juist voor om te voorkomen dat er uberhaupt een rainbow table kan worden gebruikt. Bovendien hoeft een rainbow table in dit voorbeeld niet "563x geprobeerd te worden" (wat dat dan ook moge betekenen). Als het gecrypte wachtwoord bekend is (omdat iemand bijvoorbeeld toegang heeft weten te krijgen tot je database) is ook je salt bekend. Maar dat is helemaal niet erg, want omdat de indringer waarschijnlijk geen rainbow table heeft liggen die met die salt is gemaakt, zal hij een dictionary attack of misschien zelfs wel een brute force attack moeten uitvoeren. Om die reden is het dus ook geen probleem als de salt bekend is, zolang elk wachtwoord maar met een unieke salt is gehasht.
Vervolgens dien je er voor te zorgen dat alle DATA delen in je SQL op de juiste manier worden ge-escaped.
Prepared statements zijn een middel hiertoe. Maar wederom dien je te snappen hoe prepared statements werken en hoe je hier veilig mee omgaat. Ik heb hier (of ergens anders) iemand serieus prepared statements zien gebruiken waarbij superglobal-variabelen werden geconcateneerd aan een querystring. Het (verkeerd) gebruik van prepared statements kan nog veel catastrofaler zijn dan andere oplossingen omdat het je een vals gevoel van veiligheid kan geven.