|
В днешни дни всеки от нас малко или много е засегнат от развитието на информационните технологии. Пазаруване, банкови операции, дори социални контакти... Дори и да не искаме, наши лични данни се пазят в електронен вид в най- различни бази данни на държавни институции, банки, сайтове за електронни разплащания и др. В този смисъл предпазването на тези данни от злонамерено придобиване и използване и в България е уредено със закон (ЗАКОН за защита на личните данни. Обнародван в ДВ, бр. 1 от 4.01.2002 г), но друг е въпросът за техническата страна на надеждността на информационните системи.
В този урок ще разгледаме един от най-„популярните” начини за нерегламентиран достъп до данни и съответно начините за предпазване от него. Става въпрос за вкарването и изпълнението на SQL код в база данни през полета на входни формуляри (html форми). Или така наречените SQL инжекции. Какво е SQL инжекция? Най-лесно това може да се обясни с един малък пример. Нека да разиграем един сценарий: Боб е програмист на свободна практика, нает от банка за разработване на система за електронни разплащания с кредитни карти. Като част от системата, Боб създава следната таблица в базата данни (примера е с MySQL): CODE
След което зарежда съществуваща информация в таблицата: CODE
Тук менажера на проекта би трябвало да забележи една нередност - паролите никога не трябва да се пазят в явен вид! Обикновено те се записват еднопосочно криптирани (например като MD5 хеш). Както и да е, това е друга тема. Боб продължава с login формуляр за системата: CODE
И така Боб е изпълнил изискването на проект-менажера: Потребителя въвежда име и парола, и ако те са коректни вижда съобщението: Hello [име-на-потребителя]! Your credit card number is: [номер-на-картата]. Боб е свършил възложеното му. Получава си парите за свършената работа и доволен продължава с друга работа .... Ето как комбинацията от недоглеждане на менажера и незнанието на Боб позволяват на хакера X да заобиколи защитата и да види номера на поне една кредитна карта. Веднага се вижда, че е използван метод GET вместо по-сигурния POST, което улеснява още повече хакер X. Поглеждайки html кода на страницата за login, X забелязва този факт и просто в полето за адрес на своя браузър записва: CODE
И вижда следното: Hello Sidewinder! Your creditcard number is: 0123456789987654. Как се получи това? - „Инжектирания” код: CODE
променя SQL заявката така: CODE
Вижда се, че условието във WHERE ще бъде винаги изпълнено за всички редове. Тук логиката на скрипта ограничава изхода до първия ред от таблицата, но сами се сещате, че с добавяне на малко програмиране може да се извлече цялата таблица. За да не се превръща урока в ръководство за хакери, ще спра до тук.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









