Autor Zpráva
stuchlej
Profil
Dobrý den. Chtěl bych se zeptat, zda a jak je bezpečný zápis hesla přímo do skriptu PHP.
Jakou metodu by jste mi doporučily vy?
děkuji
WanTo
Profil
Když už, tak minimálně bych ho tam zapsal jako hash. Příklad s MD5:

if (md5($heslo) == "0b2702879fee9aee925f8d6e30fc2ad8")) udelej_neco; 
mckay
Profil
stuchlej:
Pokud ke skriptu nemá přístup nikdo jiný (čehož prakticky těžko v realitě dosáhneš), tak by to mělo být jedno, ale protože se php nekompiluje, tak to není moc bezpečné, tedy alespoň jak řekl WanTo, použít otisk hesla.
AM_
Profil
Ještě bych tam přidal alespoň salt, neosolený hash ne zrovna silného hesla lze rychle nalézt v rainbow tabulce.
if (sha1($heslo.'$@SALT#!') == "<sha1-kód>")) udelej_neco; 

Salt může být prakticky cokoli - čím šílenější string, tím lepší. Navíc SHA1 je o něco silnější než MD5.
stuchlej
Profil
Takže mi v podstatě doporučujete mít jako heslo do mysql otisk hesla pomocí hash?
Tím myslím, že si zadám ve formůláři heslo, pak si z něj udělám otisk a ten otisk použiji jako heslo do MySQL.
Můžu si změnit heslo do mysql na tak dlouhy řetězec?
Joker
Profil
stuchlej:
Tím myslím, že si zadám ve formůláři heslo, pak si z něj udělám otisk a ten otisk použiji jako heslo do MySQL.
To je na nic, protože to nebude fungovat. Pokud se teda v databázi nenastaví jako heslo přímo ten hash, tj. ve formuláři se zadá třeba "heslo", ale skutečné heslo k databázi by bylo "955db0b81ef1989b4a4dfeae8061a9a6".

Tak jako tak ale v připojovacím skriptu se prostě musí použít "čisté" heslo.
AM_
Profil
No mohl bys to něčím šifrovat, ale musel bys to umět dešifrovat a mít k dispozici všechny klíče, které by pak snadno získal i hacker, takže to vlastně nemá smysl. Když už se ti někdo dostane do PHP kódu, je to dost velká katastrofa; hesla uživatelů v databázi se hashují proto, že když někdo nahackuje web, nezíská tak snadno jejich hesla, která mají často i k jiným službám stejná.
bohyn
Profil
stuchlej:
Heslo do MySQL ti nezbyde než udělat plaintext třeba přímo do PHP souboru. Musíš se smířit s tím, že když se někdo dostane k PHP, tak bude mít i heslo k MySQL

mckay:
Ani ve zkompilovaném kódu není heslo v bezpečí.
stuchlej
Profil
Joker:
To je na nic, protože to nebude fungovat. Pokud se teda v databázi nenastaví jako heslo přímo ten hash, tj. ve formuláři se zadá třeba "heslo", ale skutečné heslo k databázi by bylo "955db0b81ef1989b4a4dfeae8061a9a6".
>
Tak jako tak ale v připojovacím skriptu se prostě musí použít "čisté" heslo.

To to heslo tam nebudu moci zadat ve formuláři?
Když ho tam dám ve formuláři ta přece nebude rozdil mezi tím zda jsem ho zapsal do skriptu nebo zda sem ho zadal do formuláře?
AM_
Profil
stuchlej:
Ty budeš zadávat heslo do databáze přes formulář? No fuj. Co tě k tomu vede? Pokud teda nepíšeš konkurenci phpMyAdminovi
stuchlej
Profil
Ne ale zkouším si pstát v PHP účetnictví, protže neumím jinný jazyk.
Jinak jak to děláte vy?
Joker
Profil
AM:
Ty budeš zadávat heslo do databáze přes formulář?
Tak může jít o nějaký instalační nebo konfigurační formulář.

stuchlej:
Jinak jak to děláte vy?
Prostě heslo do databáze musí být někde uložené v plaintextu.
AM_
Profil
Joker:
Tak může jít o nějaký instalační nebo konfigurační formulář.
to je možné. Nicméně stejně nechápu, v čem je problém.
bohyn
Profil
stuchlej:
Pokud to nemá být klasická webstránka tak IMHO neni špatný nápad zkombinovat přihlašování k databázi s přihlášením do aplikace. Takže třeba sha otisk hesla schovaný v session (a heslo do MySQL ten otisk) by mělo být celkem OK.
Dají se tak třeba odlišit různá práva uživatelů. Nejlepši způsob jak někomu povolit read-only přístup je nedát mu zapisovací práva. Pak se nemusíš spoléhat jen na bezpečnost PHP skriptů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0