Автор: Пользователь скрыл имя, 21 Ноября 2011 в 18:13, контрольная работа
Якщо Ви плануєте створювати свій динамічний сайт на платформі Windows, то у Вас швидше за все виникне завдання вибору СУБД для зберігання інформації (з мовою, на якому Ви будете його програмувати, судячи з усього, питань не виникає). Одним з варіантів її вирішення, може виявитися використання MS Access в якості SQL-сервера. Далі буде описано, як у скрипті, написаному на PHP, звернутися до бази даних MS Access. .
Ось приклад відкриття
БД захищеної на рівні користувачів за
допомогою DAO або ADO
Public Sub TestDAO()
Dim mWS As DAO.Workspace
Dim mDB As DAO.Database
DBEngine.SystemDB = "C:\
Set mWS = DBEngine.
("", "test_
Set mDB = mWS.
("C:\test\a97.mdb",
End Sub
Public Sub TestADO()
Dim CnDB As New ADODB.
CnDB.Open "Provider=
"Data Source=C:\
"Jet OLEDB:
"User ID=test_
"Password=test_
End Sub
Зняття такого захисту.
Створити нову БД. В ярлику прописати
шлях до цієї БД, MDW файл захищеної БД
ім'я та пароль власника. Відкрити за
допомогою цього ярлика нову БД.
Імпортувати до неї таблиці із
захищеної, після чого змінити для
всіх об'єктів БД власника на Admin. Для
того, щоб дізнатися ім'я і пароль власника
БД можна скористатися спеціалізованими
програмами, описаними в огляді Паролі
Access. За відсутності файлу робочих груп
його можна відновити. Для цього буде потрібно
дізнатися імена і ідентифікатори власників
об'єктів БД. Ця інформація міститься у
файлі бази даних і може бути залучена
за допомогою таких програм як AOPR. Використовуючи
ці дані створюється новий файл. (Послідовність
описана вище)
Зовсім не обов'язково використовувати
програми, що дозволяють визначити пароль
БД або користувача. Часто програмісти
зовсім не піклуються про приховування
пароля в тексті програми. Запустивши
програму, що працює на захищених БД необхідно
відкрити в шістнадцятковому редакторі
WinHex віртуальну пам'ять цього додатка.
Провівши пошук Unicode рядків 'User ID ='; 'Password
='; 'Database Password =' або 'pwd =' можна знайти
ім'я користувача, його пароль і пароль
бази даних.
Можна зовсім проігнорувати наявність
захисту. Для цього треба скористатися
AccessRecovery, яка створює новий файл без захисту
і переносить в нього таблиці, запити,
форми, макроси, звіти і код модулів.
Нестандартні способи захисту
Зміна
розширення файлу
Досить простий спосіб ввести в оману - зміна розширення файлу БД. Побачивши незнайому розширення, не кожен спробує з'ясувати природу цього файлу. Крім цього з'являється можливість зв'язати це розширення з вашою програмою, так щоб при кліці по файлу запускалося ваш додаток, а не Access. Бажано відкривати такий файл з монопольним доступом, так як в цьому випадку не буде створюватися ldb файл.
Захист за допомогою пароля БД, що містить нецензурні символи
В першу
чергу цей спосіб націлений на
протидію визначення паролів за допомогою
спеціальних програм. Одна база з
таким захистом добре попсувала
мені негаразди. Тепер я попсую настрій
її авторам розповівши про цю захисту.
Спосіб заснований на тому, що пароль БД
формату Access 2000 і 2002-2003 - текстовий рядок
у форматі Unicode. При цьому, немає ні
яких обмежень на її вміст. Стандартний
спосіб встановлення і використання пароля
БД передбачає його введення з клавіатури
в діалоговому вікні. Якщо стоку пароля
містить нецензурні символи, то вони не
будуть коректно відображені програмою
відкриває паролі БД. З іншого боку цей
пароль можна ввести в діалоговому вікні
при відкритті БД в MS Access.
Але й про Access 97 я не забув. Справа в тому,
що в специфікації баз даних і в довідці
по DAO 3.60 зазначено, що максимальна кількість
символів в паролі - 14. Але насправді їх
може бути 20. При цьому і сам Access 97 не допускає
введення рядків пароля більше 14 символів.
У специфікації Access 2003 також сказано про
14 символів, але програма допускає введення
всіх 20. Також можливе використання недрукованих
символів, що приводить більшість програм
зламували паролі в ступор.
Для установки такого пароля потрібно
використовувати програму, яка використовує
метод CompactDatabase бібліотек ADOX або DAO.
Злом захисту.
Захист з модифікацією файлу
Спосіб
захисту заснований на модифікації перших
байт файлу. Таким чином, перед відкриттям
БД в її файл записується правильний заголовок,
що зберігається в програмі, а після закриття
повертається неправильний. При спробі
відкрити файл БД за допомогою ms Access з'являється
повідомлення про помилку. Не погано поєднати
цей спосіб зі зміною розширення файлу.
Наприклад, можна взяти заголовок dbf файлу
і записати його в початок mdb файлу. Далі
міняємо розширення файлу на dbf і насолоджуємося
результатом. БД тепер можна відкрити
в Excel, Access або іншою програмою, що дозволяє
читати dbf файли. Ось приклад такого перетворення:
'модификация заголовка
файла БД
'Ex: Call BaseProtect("C:\01.mdb", True)
Public Sub BaseProtect(sPath
Dim iFn As Integer
iFn = FreeFile()
Open sPath For Binary
Put #iFn, 5, CStr(IIf(
"ProtectDataBase", "
Close #iFn
End Sub
Метод не досить ефективний, так як програму, що працює з БД, можна перервати штучно і на диску залишиться не захищена БД. Тому варто його використовувати тільки в поєднанні з іншими способами.
Захист зміною версії БД
Цей спосіб
- подальший розвиток ідеї модифікації
заголовка файлу з метою протидії програмами,
читає паролі. Метод заснований на тому,
що для роботи з БД Access 97 та 2k програми
використовують різні алгоритми читання
пароля і при цьому намагаються самостійно
визначити версію mdb файлу.
Для визначення версії можна використовувати
послідовність з 40 байт, починаючи з 122
від початку файлу. Якщо в БД Access 97 вписати
цю послідовність від Access 2k, то отримаємо
цікавий результат. Програма ms Access, ADO і
DAO нормально працюють з цим файлом, а більшість
зламували паролі програм попадаються
на цей прийом. Аналогічний результат
може бути отриманий при пересадці байтовой
послідовності з Access 97 в Access 2k
заголовок файла Access 2k
зелёным выделен фрагмент пароля БД
синим - фрагмент характерный для версии
БД
Offset 0 1 2 3 4 5
00000000 00 01 00 00 53 74
00000010 20 44 42 00 01 00
00000020 E9 A9 67 72 40 3F
00000030 79 BA ED 30 BC DF
00000040 BC 4E 9B 6D EC 37
00000050 8A 60 49 02 7B 36
00000060 B1 33 29 F7 79 5B
00000070 98 FD DC 75 0C FF
00000080 85 67 C6 1F 27 44
00000090 78 16 0C ED E9 2D
Захист з використанням електронного ключа
Це ще одне підтвердження, того, що стандартні способи захисту, навіть від сторонніх виробників уразливі. Мова йде про ключі HASP. За допомогою утиліти HASP Envelope можна зашифрувати файл (у даному випадку БД) і дозволити до нього доступ тільки з захищеного застосування. Використовується механізм "прозорого " шифрування. Зі стартом операційної системи запускається певний процес, який відстежує всі звернення до захищеного файлу БД. Якщо це запит надає звичайного застосування, наприклад від ms Access - файл читається і виводиться повідомлення про "нерозпізнаваною форматі бази даних ". Але якщо з файлом працює вказаний при шифруванні додаток, то дані передаються йому в дешифровано вигляді. У результаті, сама програма, не підозрює про наявність захисту. Так, складність злому такої бази зростає в рази. Але при цьому треба пам'ятати, що з додатком повинен поставлятися електронний ключ, ціною N у.о. і що швидкість доступу до даних падає в два - три рази.
Взлом захисту.
Було знайдено два способи отримати БД своє повне розпорядження.
Шифрування значень таблиць
Цей спосіб не поганий. У всякому випадку з'являється реальна надія що якось врятувати. Однак є ряд обмежень. Перед відображенням даних їх необхідно дешифрувати. Немає можливості пошуку по частині рядка в зашифрованому полі. Алгоритм шифрування і ключ містяться в програмі, а значить, є потенційна вразливість. У даному випадку надійність залежить від стійкості до злому програми, що працює з БД. Можна поєднувати приємне з корисним: не шифрувати, а стискати вміст memo полів. Розбиратися з алгоритмом стиснення в коді програми заняття нудне.
Висновок
Перед
тим як ставити питання про спосіб захисту
БД варто задуматися про її необхідність.
Не варто покладатися на стандартні методи,
але це не привід для відмови від використання
Access. Спеціаліст зламає що завгодно, але
можна зробити, щоб це було не так просто.