[PHP / MySQL] Hoe pass opslaan ( != plain text )

Pagina: 1
Acties:
  • 155 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Tweakerds,

Ik sla altijd in mijn config file de database username, password, etc gewoon op als plain tekst. Als iemand nu handig is en hij kan je config file zien, heeft ie ook meteen toegang tot je db. Is er een andere (betere) manier van het opslaan van database wachtwoorden?

Je kunt natuurlijk encryptie gebruiken, maar dat moet dan dus ook weer te encrypten zijn, wat natuurlijk mogelijk is, maar er zijn vast meer ideen.

Ik vat dat het princiepe gewoon is, vergelijken tegenover een ander password, of decrypten met een string o.i.d, maar waarom gooit men zo vaak gewoon plain passwords er in? Je kunt denken, als je gehacked wordt o.i.d. weten ze meer dan je mysql password, maar dit hoeft niet perse.

Ik zoek gewoon iets wat voor de server bekend is en niet zo maar 1-2-3 te decrypten is (geen script, maar een manier). Kan mysql geen encrypted passwords lezen of iets dergelijks?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dit is zo goed als onmogenlijk. Waneer immers iemand bij dat configuratie script kan komen, kan degene ook bij het decrypt algoritme komen. Je zult immers ergens in je script aan moeten geven hoe het geencrypte wachtwoord wordt gedecrypt om verbinding te maken met de database.

Ook als mysql encrypted wachtwoorden zou accepteren, zou de inbreker gewoon het ge-encrypte wachtwoord kunnen gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Encyprted password lezen? Nope, daar heeft MySQL geen standaard functies voor. Wel kan je bijv. een MD5 hash van een wachtwoord opslaan. Daar heeft MySQL een standaard functie voor. Dit is echter niet te decrypten. Je kan het dus alleen gebruiken als je aan de gebruiker een wachtwoord vraagt. Je maakt daarna een MD5 hash van het wachtwoord en dat vergelijk je met wat in de DB staat.
Daarnaast zijn er een flink aantal encryptie/decryptie mogelijkheden. Deze zijn erg goed te vinden m.b.v. google, en zelfs een aantal voorbeelden kan je vinden m.b.v. de GoT search ;)

Wat heb je zelf al gevonden? Heb je zelf al enig idee wat te doen? Want deze info is echt wel te vinden :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Waarom zou je het willen? Ervan uitgaande dat diegene die toegang hebben tot je FTP betrouwbaar zijn en je gewoon zorgvuldig met je gegevens omgaat is er niks aan de hand...

Vormkracht10


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

De meest veilige oplossing is imho om 2 mysql gebruikers te maken.
1. Alleen lees rechten
2. Alle noodzakelijke rechten

Je hebt dan natuurlijk nogsteeds het zelfde probleem wanneer ze de user met alle rechten tepakken weten te krijgen. Maar hier is niets aan te doen lijkt me. Het voordeel van 2 users is wel dat de kans op database 'hacking' minder groot is.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
OkkE schreef op donderdag 06 januari 2005 @ 12:15:
De meest veilige oplossing is imho om 2 mysql gebruikers te maken.
1. Alleen lees rechten
2. Alle noodzakelijke rechten

Je hebt dan natuurlijk nogsteeds het zelfde probleem wanneer ze de user met alle rechten tepakken weten te krijgen. Maar hier is niets aan te doen lijkt me. Het voordeel van 2 users is wel dat de kans op database 'hacking' minder groot is.
Dan heb je alleen nog het probleem dat je host dit wel moet toestaan, bij mijn host kun je alleen gebruikers maken met alle rechten. Opzich wel jammer. Terwijl er gebruik wordt gemaakt van PLESK, toch één van de betere beheer omgevingen.

Vormkracht10


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Nu online

Kaastosti

Vrolijkheid alom!

Er zijn zoals Creepy zegt nogal wat mogelijkheden wat betreft encryptie. Probleem is dat in de situatie die jij schetst, ook meteen de gebruikte encryptiesleutel bekend gaat zijn bij de 'hacker'. Daar heb je dus weinig aan, aangezien alles dan ook makkelijk weer te decrypten is.

MD5 is, zoals gezegd, de meest veilige manier van opslaan van wachtwoorden. Het gaat echt nooit meer decrypted worden in ieder geval. Nadeel is dat als iemand z'n wachtwoord kwijt is, er een nieuwe ingesteld moet worden, aangezien je zelf ook nooit meer aan het origineel komt. Wel is de geschetste manier de meest gebruikte en meest veilige.

Een andere optie is gewoon zorgen dat je een veilige omgeving hebt ;)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Kaastosti schreef op donderdag 06 januari 2005 @ 12:25:
MD5 is, zoals gezegd, de meest veilige manier van opslaan van wachtwoorden. Het gaat echt nooit meer decrypted worden in ieder geval. Nadeel is dat als iemand z'n wachtwoord kwijt is, er een nieuwe ingesteld moet worden, aangezien je zelf ook nooit meer aan het origineel komt. Wel is de geschetste manier de meest gebruikte en meest veilige.
MD5 is hier geen optie, aangezien je geen paswoord aan MySQL kunt doorgeven dat in MD5 is vertaalt.

Vormkracht10


Acties:
  • 0 Henk 'm!

  • Kaastosti
  • Registratie: Juni 2000
  • Nu online

Kaastosti

Vrolijkheid alom!

Damned je hebt gelijk... ik moet posts beter leren lezen :| In dat geval kun je er vrij weinig aan doen. Misschien een progje gebruiken met een sleutelwoord wat je zelf onthoudt? Dan staat het in ieder geval nergens op schijf... maar dan, waarom zou je niet gewoon je wachtwoord onthouden :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Acties:
  • 0 Henk 'm!

  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 08:47

Eelke Spaak

- Vlad -

Creepy schreef op donderdag 06 januari 2005 @ 12:10:
Encyprted password lezen? Nope, daar heeft MySQL geen standaard functies voor. Wel kan je bijv. een MD5 hash van een wachtwoord opslaan. Daar heeft MySQL een standaard functie voor. Dit is echter niet te decrypten. Je kan het dus alleen gebruiken als je aan de gebruiker een wachtwoord vraagt. Je maakt daarna een MD5 hash van het wachtwoord en dat vergelijk je met wat in de DB staat.
Daarnaast zijn er een flink aantal encryptie/decryptie mogelijkheden. Deze zijn erg goed te vinden m.b.v. google, en zelfs een aantal voorbeelden kan je vinden m.b.v. de GoT search ;)

Wat heb je zelf al gevonden? Heb je zelf al enig idee wat te doen? Want deze info is echt wel te vinden :)
No offense, maar volgens mij begrijp je de vraag niet helemaal :) . De TS wil zijn MySQL wachtwoord beveiligen, niet een wachtwoord dat een gebruiker moet intypen.

Het is volgens mij niet nodig om dit wachtwoord te encrypten; je moet er gewoon voor zorgen dat het te allen tijde onmogelijk is voor de web users om het bestand met de gegevens op te vragen via HTTP. Je zou het bestand bijvoorbeeld buiten de webroot kunnen plaatsen en hem dan includen in je PHP-files.

TheStreme - Share anything with anyone


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

@hierboven

Daarnaast kun je je server zo configureren dat dat wachtwoord enkel en alleen te misbruiken is wanneer de inbreker ook daadwerkelijk bestanden neer kan zetten. Aan een wachtwoord alleen heb je nog niet genoeg waneer je alleen maar via local host mag connecten.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

een php file is toch nooit van de server te krijgen zonder dat het word geparsd?
we nemen een connex.php:
code:
1
2
3
4
<?php
$db = mysql_connect('localhost', 'gebruiker', 'wachtwoord'); 
mysql_select_db("tabelnaam");
?>

dan zijn 'gebruiker' en 'wachtwoord' naar mijn mening nooit door de gebruiker te lezen. Als een bezoeker naar ...../connex.php gaat dan krijgt ie gewoon een lege pagina. Is dit het probleem of vat ik het ook niet :)

[ Voor 10% gewijzigd door Verwijderd op 06-01-2005 12:54 . Reden: voltooid deelwoord is met een -d :) ]


Acties:
  • 0 Henk 'm!

  • Wacky
  • Registratie: Januari 2000
  • Laatst online: 05-09 21:19

Wacky

Dr. Lektroluv \o/

Verwijderd schreef op donderdag 06 januari 2005 @ 12:49:
een php file is toch nooit van de server te krijgen zonder dat het word geparsd?
we nemen een connex.php:
code:
1
2
3
4
<?php
$db = mysql_connect('localhost', 'gebruiker', 'wachtwoord'); 
mysql_select_db("tabelnaam");
?>

dan zijn 'gebruiker' en 'wachtwoord' naar mijn mening nooit door de gebruiker te lezen. Als een bezoeker naar ...../connex.php gaat dan krijgt ie gewoon een lege pagina. Is dit het probleem of vat ik het ook niet :)
Het configuratiebestand is dan alsnog via FTP op te halen, en als je PHP parser er de brui aan geeft wordt alles mooi plain-text weergegeven ;)

Nu ook met Flickr account


Acties:
  • 0 Henk 'm!

  • Hagar
  • Registratie: Februari 2001
  • Laatst online: 20-03 20:39

Hagar

Diabootic

zorg er dan iig voor dat je config niet in je webroot staat en alleen de apache deamon leesrechten heeft. (en ftp dus niet)
Verder valt er idd weinig aan te doen met encryptie e.d.

Nu ook zonder stropdas


Acties:
  • 0 Henk 'm!

  • WPN
  • Registratie: Augustus 2003
  • Laatst online: 24-07 21:14

WPN

met sessies werken

en in je config filetje een check in bouwen of de sessie wel bestaat enzow zoniet dan zeg je dat de file niet direct benaderbaar is......

ok, ze kunnen dan wel de sessie hijacken en faken enzow, maar dat is alweer wel een stap dichterbij wat je zoekt

Als ik denk zoals ik dacht, dan doe ik zoals ik deed, als ik doe zoals ik deed, dan denk ik zoals ik dacht! Cogito Ergo Sum


Acties:
  • 0 Henk 'm!

Verwijderd

Hagar schreef op donderdag 06 januari 2005 @ 13:43:
zorg er dan iig voor dat je config niet in je webroot staat en alleen de apache deamon leesrechten heeft. (en ftp dus niet)
Verder valt er idd weinig aan te doen met encryptie e.d.
raak :)

Het is het slimste om je config bestand buiten je webroot te plaatsen, mocht PHP om wat voor reden dan uitvallen (waardoor hij dus niet meer parsed), dan is de inhoud van het bestand niet in te lezen. Ook kan je nog een ftp account extra aanmaken, dan heb je er twee. De eerste kan in je webroot en NIET buiten de webroot komen. De andere account kan alleen buiten de webroot (en dus bij je config file). Mocht iemand je ftp wachtwoord achterhalen, dan kan hij nogsteeds niets met je database, omdat het wachtwoord van de database onberijkbaar is. Dus kan hij wel bestanden uploaden naar je server om te connecten met de database, maar het connecten gaat dus niet (ander wachtwoord gebruiken als je ftp wachtwoord).

Acties:
  • 0 Henk 'm!

  • m33p
  • Registratie: September 2002
  • Laatst online: 05-09 15:26
Hmz, mja mijn TS was een beetje 'wazig' zie ik achteraf, aangezien het voor mij niet echt duidelijk is wat ik wil, maar wat ik wel wist is dat een plain wachtwoord niet echt 'secure' is ;)

Het idee van 2 mysql counts kan wel werken inderdaad, maar als men bijv via FTP de inhoud kan ophalen van je pagina's, ben je alsnog de pineut, het kost diegene alleen iets meer moeite. Het mooiste zou zijn als MySQL een soort decrypter ingebouwd had, welke weer een key nodig had welke je weer ergens apart kon opslaan o.i.d.

Nou kun je bijvoorbeeld wel een FTP account hebben met read/write rechten, welke gejailed zit in bijv een map, en dan je config daarbuiten gooien. Maar dat schiet nog niet op, want dan weet diegene ook waar die config zit, en met een simpel phpscriptje gooi je die code alsnog op het scherm als dat bestand 'include-baar' is. Is het niet mogelijk om iets in linux (mijn geval) te scripten welke iets afvangt o.i.d en dat doorknalt naar mysq. Een soort tussenstap welke de encryptie regeld, die je op de één of andere manier alleen execute rechten geeft maar geen read / write rechten, maar wel weer op een aparte gebruiken met een gecompliceed wachtwoord...

Mischien denk ik wat te simpel of te vergezocht, maar er moet toch iets zijn lijkt mij :)

edit:
Overigens is het mijn eigen server, waar ik SSH access heb. Safe mode staat uit dus de zooi buiten de webroot is geen probleem. Ook kan ik de FTP accounts e.d. gewoon aanpassen. Iemand een creatieve oplossing dan?

[ Voor 10% gewijzigd door m33p op 06-01-2005 16:43 ]

Pagina: 1