Забезпечення паролів БД


18

Дивлячись на структуру більшості базованих на PHP / MySQL веб-сайтів, які я бачив, виявляється, що не дуже складно розпізнати пароль бази даних, якщо ви копаєте трохи, оскільки там незмінно є файл налаштування або конфігурації, де зберігається інформація для реєстрації. в БД. Окрім основної обережності, щоб переконатися, що привілеї моєї бази даних належним чином обмежені для віддалених запитів, які варіанти є, які я міг би реалізувати у власних проектах для захисту цієї інформації?


1
Для уточнення - ви запитуєте про збереження облікових даних для входу в базу даних із веб-сайту, а не про те, як правильно зберігати паролі для користувачів веб-сайту у базі даних, правильно?
Джо

Правильно; це те, що я отримую.
Каджі

Відповіді:


10

Це не пряма відповідь про збереження паролів, але я, як правило, використовую принаймні два підключення до бази даних при створенні веб-сайтів - один використовується 99% часу для діяльності, пов’язаної з користувачем, з обмеженими привілеями, а інший використовується для функцій 'адміністратора' (видалити користувачів тощо).

У кількох випадках, коли я встановлюю чужий пакет, я встановлю два екземпляри ... загальнодоступний екземпляр, який має лише доступ до бази даних, щоб робити загальні користувальницькі речі, і другий екземпляр, на який обмежено IP мою локальну підмережу (можливо, навіть на іншій машині), яку потрібно використовувати для будь-яких видів "адміністратора". Жоден з них не має доступу до зміни таблиць тощо, хоча ... Я б швидше зайшов за допомогою інструментів рідної бази даних, ніж дозволити webapp виконувати власні завдання оновлення, які не були перевірені.

Ви можете взяти це ще більше, і додавати більше з'єднань спеціально для заданих завдань ... тож завдання зі створення та керування паролем переходять через користувача, який має додаткові привілеї в таблицях користувачів, увійти в систему, має привідні бази даних для автентифікації та не багато іншого тощо.

Таким чином, якщо нападає sql-ін'єкційна атака, на більшості веб-сторінок вона дійсно не може зробити нічого істотного - не може бачити хеші паролів, не може додати нового користувача адміністратора (не те, що вони зможуть зробити все одно) і т. д. Це все одно не допоможе, якщо їм вдасться отримати оболонку на вашій машині, але це сповільнить їх.


1
Ми робимо щось подібне. Однак ми зазвичай створюємо новий обліковий запис для кожного користувача / програми бази даних, а не робимо це за функціональністю. Це вирішує дві проблеми для нас - 1) ми можемо диференціювати використання бази даних в таких інструментах, як OEM (тобто ми можемо бачити, хто забиває базу даних з деталізацією) та 2) ми можемо індивідуально налаштувати те, що бачить кожен користувач і має доступ до нього. база даних.
ScottCher

7

Використовуйте одноразові паролі , Kerberos , LDAP або інше, щоб зберігати дані свого облікового запису та аутентифікувати / авторизувати користувачів. Служби каталогів - хороший засіб для зберігання інформації про користувачів та використання її як доповнення до даних облікових записів.


4

Я великий фанат використовувати аутентифікацію "Ident" PostgreSQL у локальних сокетах, коли тільки можу. Таким чином, місцеві користувачі відображаються безпосередньо у користувачів Unix / Windows локального комп’ютера, і я не маю турбуватися про збереження паролів. Я не думаю, що це ще варіант у MySQL.

Там, де база даних та веб-сервер знаходяться на двох окремих машинах, я використовую паролі MD5 через SSL: якщо ворог має доступ до мого сервера прифронтових, це лише питання часу, перш ніж він з'ясує, як він спілкується з базою даних.


3

Якщо ви використовуєте .NET Framework, ви можете вивчити використання зашифрованих рядків з'єднання. Я не знаю, чи таке можливо в будь-яких інших мовах / рамках, але це була б ще одна гарантія, щоб ваші зв’язки не були порушені.

Крім використання зашифрованих рядків з'єднання, використання LDAP / Kerberos / Active Directory стане вашим найбезпечнішим варіантом.


3

Якщо ваші паролі зберігаються у простому тексті, використовуйте хеші (MD5, SHA), Лука!


ОП не запитує про збереження паролів користувачів. Але так, звичайно, хешуйте ваші користувальницькі паролі, але ніколи не користуйтеся MD5 або сімейством SHA, щоб це зробити! Використовуйте bcrypt або PBKDF2 . В іншому випадку ви незабаром опинитесь у новинах, таких як компанії, які використовували MD5 та SHA1 і тим самим піддавали своїх користувачів простим грубим атакам.
Нік Чаммас

Звичайно, засолювання та інші прийоми потрібні, крім простого перемішування. І ніколи не слід реалізовувати крипто-примітиви самостійно, а скоріше використовувати деякі широко тестовані бібліотеки криптовалют.
Ясір Арсанукаєв

2

Залежно від мови програмування ви можете зашифрувати облікові дані для входу, але якщо ви використовуєте інтерпретовану мову, тоді немає жодного способу гарантувати, що хтось не зможе розібратися в облікових даних, якщо вони отримають доступ до системи.

Якщо ви працюєте на C ++ або подібному, я рекомендую вам створити / знайти функцію солоного шифрування / розшифрування і запустити облікові дані через неї і зберегти отриманий хеш як файл у системі.

Якщо ви використовуєте PHP або подібне, я рекомендую вам написати обгортку для mcrypt_encrypt()облікових записів і солити дані облікових записів, а потім запустити деяку обтурацію коду, щоб уповільнити будь-які хакери, якщо вони отримають доступ до системи.


Якщо ви шифруєте облікові дані, вам знадобиться якийсь інший секрет, щоб знову їх розшифрувати. Або в якості альтернативи зашифрована форма стає секретом, тому зловмисник може використовувати це. Деякі деталі відсутні.
Пітер Ейзентравт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.