[pgsql]Welke crypt() gebruiken, en hoe automatiseren
Ik wil mijn wachtwoorden natuurlijk geëncrypt in de database stoppen, maar nu vraag ik mij af welke versie van crypt() ik het beste kan gebruiken.
Ook zou ik het het liefst zo zien:
INSERT INTO users (name, password) VALUES ('Pietje', 'banaan')
En dat banaan dan automatisch wordt geëncrypt. Maar ik weet niet hoe ik dat zou moeten realiseren...
Alvast bedankt voor de hulp.
Ga dit niet in de database oplossen, maar in PHP. Je kunt wel in de database valideren met een CHECK-constraint of domain, dan weet je wel zeker dat je bv. een md5-hash als wachtwoord hebt opgeslagen. Met een regex is dat eenvoudig op te lossen.
pgFrank schreef op 28.02.2008 18:22:
Ik gebruik md5 of sha1, maar dan al in PHP. Dan gaan er nooit onversleutelde wachtwoorden over het lijntje naar de database, deze komen ook nooit onversleuteld in een logboek terecht.
Ga dit niet in de database oplossen, maar in PHP. Je kunt wel in de database valideren met een CHECK-constraint of domain, dan weet je wel zeker dat je bv. een md5-hash als wachtwoord hebt opgeslagen. Met een regex is dat eenvoudig op te lossen.
Ga dit niet in de database oplossen, maar in PHP. Je kunt wel in de database valideren met een CHECK-constraint of domain, dan weet je wel zeker dat je bv. een md5-hash als wachtwoord hebt opgeslagen. Met een regex is dat eenvoudig op te lossen.
ow jawel hoor, als je een formuliertje submit, als de database server dezelfde is als de webserver maakt dat ook niet veel uit. die routeert dan gewoon intern en blijft dus in het systeem.
Maak een DOMAIN aan, deze eist bv. een md5 hash en klaar ben je.
Code (php)
1
2
3
2
3
CREATE DOMAIN hash
AS character(32)
CONSTRAINT hash_check CHECK ((VALUE ~ '^[a-h0-9]{32}$'::text));
AS character(32)
CONSTRAINT hash_check CHECK ((VALUE ~ '^[a-h0-9]{32}$'::text));
Maak vervolgens een tabel aan met een kolom van het type hash (dus je domain) en zet daarin de md5-hash die je met PHP (!) hebt aangemaakt. Ga geen extra risico's lopen wanneer dat nergens voor nodig is.
Komt nog eens bij dat succesvolle sites niet de database op dezelfde server hebben draaien als de webserver. Daar gaat dan ook weer van alles over de lijn!
Maar ik maak eerlijk gezegd graag gebruik van sha1 in plaats van md5, alleen weet ik niet precies welke karakters, en hoeveel karakters daarin voorkomen. Weet je toevallig ook een regexp daarvoor?
En dan nog een vraag over DOMAINS. Wat kun je beter gebruiken? Een domain, of gewoon een CHECK op een normaal type?
2) In dit geval gaat het om een datatype, een sha1-hash, dan ligt een domain meer voor de hand. Daarnaast kun je nu eenvoudig op meerdere plaatsen in je systeem dit domain gebruiken, de datadefinitie wordt centraal beheerd. Moet je wijzigingen aanbrengen, dan hoef je dat maar op 1 plek te doen. Met CHECK-constraints zul je alle tabellen afzonderlijk na moeten lopen om de constraints aan te passen.
Combinaties van domains en check-constraints zijn overigens ook mogelijk, een kolom van het type hash kan natuurlijk best een check-constraint bevatten. Al kan ik zo even geen voorbeeld bedenken... Het kan!
Oke, dus als ik bijvoorbeeld een email-adres wil opslaan, dan gebruik ik daar ook een domain voor?
Yep, kan heel goed. Gewoon even een goede regex in bovenstaand domain opnemen en klaar ben je.
Oke, dankjewel voor je hulp!