Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
Zdravicko mam web na tento web chodia uzivatelia zaregistruju sa prihlasia sa atd... heslo ukladam do .txt suboru (mimo domeny t.j. k subdomene)... cez .htpasswd a .htaccess zablokujem pristup k priecinku kde sa ukladaju hesla... ale nasli sa ludia ktory nasli tento subor a neviem akym zazrakom zmenili hesla vsetkym uzivatelom.... Preto sa pytam ak nemám databázu existuje nejaký lepší spôsob ako a kam zapisovať hesla hlavne bezpecne... Ďakujem.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
ono ani zapisovanie do súboru nemusí byť nebezpečné. Ak sa ti k tomu niekto dostal a zmenil to, tak si mal niekde bug alebo pozná údaje na tvoje ftp. Pokiaľ to spravíš bezpečne, kľudne tie hesla môžu byť na serveri v txt súbore. Ale minimálne by si ich mal ukladať v nejakom hashi, a nie ako plaintext
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
Ďakujem za rýchlu a stručnu odpoveď pokúsim sa nájsť niekde návod a informácie ako to vlastne funguje...audiotrack napísal:ono ani zapisovanie do súboru nemusí byť nebezpečné. Ak sa ti k tomu niekto dostal a zmenil to, tak si mal niekde bug alebo pozná údaje na tvoje ftp. Pokiaľ to spravíš bezpečne, kľudne tie hesla môžu byť na serveri v txt súbore. Ale minimálne by si ich mal ukladať v nejakom hashi, a nie ako plaintext
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
no proste to do súboru neuložíš ako text, ale ako md5($heslo). Čiže ak sa k tomu aj niekto dostane, neprečíta heslo ale iba jeho hash. A pri prihlasovaní taktiež budeš overovať či tento hash sa rovná md5($vstup_od_uzivatela)
a návod asi nenájdeš, lebo ukladanie hesiel do súboru robíš asi len ty. Jediný na svete
Všetci ostatní na to používajú databázy.
a návod asi nenájdeš, lebo ukladanie hesiel do súboru robíš asi len ty. Jediný na svete
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
http://www.soom.cz/clanky/1121--Hashova ... ashing-APIaudiotrack napísal:no proste to do súboru neuložíš ako text, ale ako md5($heslo). Čiže ak sa k tomu aj niekto dostane, neprečíta heslo ale iba jeho hash. A pri prihlasovaní taktiež budeš overovať či tento hash sa rovná md5($vstup_od_uzivatela)
a návod asi nenájdeš, lebo ukladanie hesiel do súboru robíš asi len ty. Jediný na sveteVšetci ostatní na to používajú databázy.
toto je asi ono ci?
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
hej hej lenze to je tak vysvetlene ze tomu nerozumiem... prosim ta ak zapisujem cez file_put_contents akym sposobom to hashnem?audiotrack napísal:áno
Kód: Vybrať všetko
$file = 'people.txt';
$person = "$_POST[cislo]";
file_put_contents($file, $person);-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
Kód: Vybrať všetko
$file = 'people.txt';
$person = "$_POST[cislo]";
file_put_contents($file, password_hash($person, PASSWORD_DEFAULT));-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
no moze to byt kludne aj takto a vypada to krajsie...audiotrack napísal:Kód: Vybrať všetko
$file = 'people.txt'; $person = "$_POST[cislo]"; file_put_contents($file, password_hash($person, PASSWORD_DEFAULT));
Kód: Vybrať všetko
if(isset($_POST['ok'])){
if(isset($_POST['cislo'])){
$password = hash("sha512", $_POST["cislo"] . "n3j@ky$alt");
$file = 'people.txt';
file_put_contents($file, $password);
}
}Kód: Vybrať všetko
$homepage = file_get_contents('people.txt');
echo $homepage;-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
veď si spravíš rovnaký hash, ako si spravil tu: len namiesto $_POST["cislo"] bude vstup ktorý pošle z formulára a overíš to s tým $homepage
Kód: Vybrať všetko
hash("sha512", $_POST["cislo"] . "n3j@ky$alt");-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
aha aha a ked chcem spravit trebars viac tychto hashov...audiotrack napísal:veď si spravíš rovnaký hash, ako si spravil tu:len namiesto $_POST["cislo"] bude vstup ktorý pošle z formulára a overíš to s tým $homepageKód: Vybrať všetko
hash("sha512", $_POST["cislo"] . "n3j@ky$alt");
tak druhy bude vypadat takto?
Kód: Vybrať všetko
$heslo = hash("sha512", $_POST["premena"] . "n3j@ky$alt");a naposledy ked uz nieco hashnem znovu sa to neda zmenit na normalny text? Ďakujem
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
nie je to hash, ale salt. Môžeš použiť rovnaký, aj iný. Nie je to podstatné. Dôležité je pamätať si ho (na ktoré heslo si použil aký, preto je lepšie používať rovnaký na všetky) a držať ako súkromné tajomstvo teda nikde nezapisovať.
K druhej otázke či sa to dá znova zmeniť na text - áno aj nie. Záleží od hashového algoritmu aký použiješ. Konkrétne pre sha512 čo tam máš sa spätne text nedá získať, preto musíš len overovať hashe (uložený, a vypočítaný zo vstupu) či sú rovnaké. Ak áno, tak sú rovnaké aj heslá.
K druhej otázke či sa to dá znova zmeniť na text - áno aj nie. Záleží od hashového algoritmu aký použiješ. Konkrétne pre sha512 čo tam máš sa spätne text nedá získať, preto musíš len overovať hashe (uložený, a vypočítaný zo vstupu) či sú rovnaké. Ak áno, tak sú rovnaké aj heslá.
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
aha takze cez sha512 sa da len overovat a cez aky sa da aj citat? a vlastne naco sluzi toto? n3j@ky$altaudiotrack napísal:nie je to hash, ale salt. Môžeš použiť rovnaký, aj iný. Nie je to podstatné. Dôležité je pamätať si ho (na ktoré heslo si použil aký, preto je lepšie používať rovnaký na všetky) a držať ako súkromné tajomstvo teda nikde nezapisovať.
K druhej otázke či sa to dá znova zmeniť na text - áno aj nie. Záleží od hashového algoritmu aký použiješ. Konkrétne pre sha512 čo tam máš sa spätne text nedá získať, preto musíš len overovať hashe (uložený, a vypočítaný zo vstupu) či sú rovnaké. Ak áno, tak sú rovnaké aj heslá.
a vlastne to sha512 mam drzat ako sukromne tajomstvo?
Pytam sa primitivne otazky som si toho vedomi ale hladal som info a moc som toho nenasiel...
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
napríklad base64 sa dá spätne dekodovať
n3j@ky$alt je iba náhodný reťazec ktorý si si zvolil (alebo zkopíroval príklad z nejakého návodu). Kľudne to môže byť ireTEuít/áý alebo čísla, alebo bodky a písmenka.. čokoľvek. Nejaký textový reťazec ktorý je ťažko uhádnuteľný. A práve toto je ten salt, ktorý si máš pamätať a uchovať ako súkromné tajomstvo (ak by si si to lepšie pozrel, n3j@ky$alt je napísané nejaky salt v haxor reči, čiže namiesto a je zavináč, namiesto e je trojka, namiesto s je dolár)
sha512 je iba názov algoritmu ktorým robíš hash. Je ešte napríklad md5, sha1, spomínaný base64 a plno iných
n3j@ky$alt je iba náhodný reťazec ktorý si si zvolil (alebo zkopíroval príklad z nejakého návodu). Kľudne to môže byť ireTEuít/áý alebo čísla, alebo bodky a písmenka.. čokoľvek. Nejaký textový reťazec ktorý je ťažko uhádnuteľný. A práve toto je ten salt, ktorý si máš pamätať a uchovať ako súkromné tajomstvo (ak by si si to lepšie pozrel, n3j@ky$alt je napísané nejaky salt v haxor reči, čiže namiesto a je zavináč, namiesto e je trojka, namiesto s je dolár)
sha512 je iba názov algoritmu ktorým robíš hash. Je ešte napríklad md5, sha1, spomínaný base64 a plno iných
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
aha aha dakujem dakujem...audiotrack napísal:napríklad base64 sa dá spätne dekodovať
n3j@ky$alt je iba náhodný reťazec ktorý si si zvolil (alebo zkopíroval príklad z nejakého návodu). Kľudne to môže byť ireTEuít/áý alebo čísla, alebo bodky a písmenka.. čokoľvek. Nejaký textový reťazec ktorý je ťažko uhádnuteľný. A práve toto je ten salt, ktorý si máš pamätať a uchovať ako súkromné tajomstvo (ak by si si to lepšie pozrel, n3j@ky$alt je napísané nejaky salt v haxor reči, čiže namiesto a je zavináč, namiesto e je trojka, namiesto s je dolár)
sha512 je iba názov algoritmu ktorým robíš hash. Je ešte napríklad md5, sha1, spomínaný base64 a plno iných
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
-
buchticka221
Medium Expert
- Príspevky: 120
- Registrovaný: 09 jan 2013, 13:14
- Bydlisko: Galanta
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
Hashovať hesla za pomoci base64? Tak to snaď nie... to ich môžeš rovno nechať také aké sú - uložené ako plain text. Tiež by ma zaujímalo načo chceš tie heslať v pôvodnej forme, nevieš ako porovnať zadané heslo pri logine s tým uloženým? Keď ich chceš mať po ruke v takom stave v akom ich používateľ zadal tak použi aspoň AES.
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
base64 v prvom rade ani nie je hashovacia funkcia.
buchticka, base64 encode/decode sa typicky používa pri kódovaní binárnych dát do tlačiteľných znakov. Nie je tam žiadna súvislosť s bezpečným ukladaním hesiel.
Hashovacie funkcie (md5, sha1, sha256 atď) sa používajú na to, aby som z jedného reťazca bajtov dostal nejaký iný, unikátny reťazec bajtov, ktorý ho jednoznačne reprezentuje. Vo všeobecnosti ale platí, že ten výsledok (tzv. hash) nie je možné v rozumnom čase previesť späť do pôvodnej podoby. Keď takto uložíš heslo, tak je v podstate "zašifrované" a nikto sa k pôvodnému heslu už nedostane (v ideálnom prípade) - tzn. neexistuje inverzná funkcia k hashovacej. Žiadne unmd5( md5("heslo") ) sa urobiť nedá.
To má výhodu, pretože k heslám užívateľov sa útočník nedostane, aj keď hackne databázu.
Urobíš teda toto:
Užívateľ sa zaregistruje, heslo zahashuješ a uložíš (takže uložíš napr. md5($heslo)). Tým pádom to heslo nikde uložené nie je a iba užívateľ vie, ktorý reťazec dá ten konkrétny hash (pretože pozná to heslo). Takže sa prihlási so svojím heslom a ty urobíš to isté if( md5($zadaneHeslo) == $hashZDatabazi ). Ak sa rovnajú, užívateľ zadal správne heslo, pretože vytvorilo rovnaký hash. Hashovacie funkcie zaisťujú to, že na toto môžeš spoliehať a hashe budú unikátne (Takže sa nestane, že niekto zadá iné heslo a vygeneruje to rovnaký hash)
(Kolízie zámerne nespomínam, netreba sa tým hneď zaoberať)
Soliť (salt) netreba (nie je to nutnosť) Robí sa to len pre posílenie šifry (umelé predĺženie, či iná transformácia hesla). Útočníkovi tým ešte viac znepríjemňuješ prácu.
A ešte posledná vec, aj databáza je len kopa súborov. Ak si súbory navrheš dobre, môžu ti ju pri menšom projekte plnohodnotne nahradiť. Len databáza je oveľa inteligentnejšia, rýchlejšia a zložitejšia kopa súborov, než akú ty kedy vymyslíš.
Takže súhrn:
- na ukladanie hesiel používaj hashovaciu funkciu (ideálne sha256 a viac) s prípadným solením.
- base64 nemá s heslami nič, nepoužívať!
- Všetko je súbor. Aspoň v unixe určite.
buchticka, base64 encode/decode sa typicky používa pri kódovaní binárnych dát do tlačiteľných znakov. Nie je tam žiadna súvislosť s bezpečným ukladaním hesiel.
Hashovacie funkcie (md5, sha1, sha256 atď) sa používajú na to, aby som z jedného reťazca bajtov dostal nejaký iný, unikátny reťazec bajtov, ktorý ho jednoznačne reprezentuje. Vo všeobecnosti ale platí, že ten výsledok (tzv. hash) nie je možné v rozumnom čase previesť späť do pôvodnej podoby. Keď takto uložíš heslo, tak je v podstate "zašifrované" a nikto sa k pôvodnému heslu už nedostane (v ideálnom prípade) - tzn. neexistuje inverzná funkcia k hashovacej. Žiadne unmd5( md5("heslo") ) sa urobiť nedá.
To má výhodu, pretože k heslám užívateľov sa útočník nedostane, aj keď hackne databázu.
Urobíš teda toto:
Užívateľ sa zaregistruje, heslo zahashuješ a uložíš (takže uložíš napr. md5($heslo)). Tým pádom to heslo nikde uložené nie je a iba užívateľ vie, ktorý reťazec dá ten konkrétny hash (pretože pozná to heslo). Takže sa prihlási so svojím heslom a ty urobíš to isté if( md5($zadaneHeslo) == $hashZDatabazi ). Ak sa rovnajú, užívateľ zadal správne heslo, pretože vytvorilo rovnaký hash. Hashovacie funkcie zaisťujú to, že na toto môžeš spoliehať a hashe budú unikátne (Takže sa nestane, že niekto zadá iné heslo a vygeneruje to rovnaký hash)
(Kolízie zámerne nespomínam, netreba sa tým hneď zaoberať)
Soliť (salt) netreba (nie je to nutnosť) Robí sa to len pre posílenie šifry (umelé predĺženie, či iná transformácia hesla). Útočníkovi tým ešte viac znepríjemňuješ prácu.
A ešte posledná vec, aj databáza je len kopa súborov. Ak si súbory navrheš dobre, môžu ti ju pri menšom projekte plnohodnotne nahradiť. Len databáza je oveľa inteligentnejšia, rýchlejšia a zložitejšia kopa súborov, než akú ty kedy vymyslíš.
Takže súhrn:
- na ukladanie hesiel používaj hashovaciu funkciu (ideálne sha256 a viac) s prípadným solením.
- base64 nemá s heslami nič, nepoužívať!
- Všetko je súbor. Aspoň v unixe určite.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Zabespečenie kam vkladať heslá uživ. ak nemám databázu?
ja som nikde nenapísal že ich má hashovať cez base64. Ja som písal o base64 v kontexte hashovacích funkcií, a spomenul som ju ako jednu z mnohých. Ďalej sa to už len rozvíjalo lebo sa pýtal konkrétne na to, ktorá sa dá dekodovať a ako.S-player napísal:Hashovať hesla za pomoci base64? Tak to snaď nie... to ich môžeš rovno nechať také aké sú - uložené ako plain text. Tiež by ma zaujímalo načo chceš tie heslať v pôvodnej forme, nevieš ako porovnať zadané heslo pri logine s tým uloženým? Keď ich chceš mať po ruke v takom stave v akom ich používateľ zadal tak použi aspoň AES.
BX: je viacero definícii hashovacích funkcí. Do niektorých spadá, do iných nie.