Mysql
 sql >> база данни >  >> RDS >> Mysql

Защо mysqli_connect() трябва да получи параметъра за парола без криптиране?

Вие като потребител не знаете как е шифрована паролата (всъщност изобщо не е шифрована, а е хеширана).

Просто предавате паролата и MySQL може да извърши същото хеширане като на оригиналната парола и да я сравни с това, което се съхранява. Ако подадете хешираната версия, цялата полза от хеширането изчезва:Ако някой получи хешовете от сървъра, той може просто да ги използва, за да влезе, сякаш са нормални пароли. Тогава хешът се превърна в парола.

Допълнително предимство е, че MySQL, тъй като има оригиналната парола, може да я хешира отново с по-добър алгоритъм, да добави малко сол и да съхрани тази подобрена версия. Ако никога не получи оригинала, това не може да стане. Функциите за пароли на PHP подкрепете и това. Можете да проверите с password_needs_rehash ако хеширана парола все още е хеширана правилно, и актуализирайте вашата база данни, ако не е.

Така че за сигурност ще трябва да вземете други мерки. Това са поне:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да проверя дали INSERT работи добре в съхранената функция?

  2. PHP + MySQL:Разлика между буферирани и небуферирани заявки

  3. Списък със съхранени процедури/функции Mysql команден ред

  4. Изберете всеки месец, въпреки че месецът не съществува в таблицата на mysql

  5. Spring Boot + docker-compose + MySQL:Връзката е отказана