Вие като потребител не знаете как е шифрована паролата (всъщност изобщо не е шифрована, а е хеширана).
Просто предавате паролата и MySQL може да извърши същото хеширане като на оригиналната парола и да я сравни с това, което се съхранява. Ако подадете хешираната версия, цялата полза от хеширането изчезва:Ако някой получи хешовете от сървъра, той може просто да ги използва, за да влезе, сякаш са нормални пароли. Тогава хешът се превърна в парола.
Допълнително предимство е, че MySQL, тъй като има оригиналната парола, може да я хешира отново с по-добър алгоритъм, да добави малко сол и да съхрани тази подобрена версия. Ако никога не получи оригинала, това не може да стане. Функциите за пароли на PHP
подкрепете и това. Можете да проверите с password_needs_rehash
ако хеширана парола все още е хеширана правилно, и актуализирайте вашата база данни, ако не е.
Така че за сигурност ще трябва да вземете други мерки. Това са поне:
- Съхранявайте паролата във включен файл, който се намира извън корена на документа. По този начин никой не може да отвори този файл директно.
- Можете да предотвратите отварянето на включени файлове, без да сте включени (например като проверите за дефиниране, зададено в index.php). Това е хубаво, но ако PHP се провали поради грешка в конфигурацията, хората могат просто да преглеждат изходния код на файла, така че спазвайте предишното правило.
- Винаги създавайте специален потребител на базата данни. Не използвайте
root
. Дайте на този потребител достатъчно право да управлява базата данни, но не повече. Няма права за премахване на таблици например. - Винаги давайте на този потребител уникална парола. Не е нужно да помните тази парола. Просто генерирайте случаен боклук с много знаци.
- Сменяйте редовно паролата. Може би дори бихте могли да напишете това и да съхраните актуализираната парола в конфигурацията.