ПредишенСледващото

SQL инжекция - това е един от най-достъпни начини за хакване на сайта.
Същността на тези инжекции - въвеждане на данни (прехвърля чрез GET, POST заявки или Cookie стойности) произволен SQL код. Ако даден сайт е уязвима и извършване на такава инжекция, в интерес на истината това е възможно да се създаде база данни (най-често MySQL) нищо.

Как да се изчисли уязвимост, която позволява да се въведе SQL инжекция?

Заявка за промяна на стигнем до? Подробности = 1 \ 'или? Подробности = 1 ". След това се опита да премине тези искания към сървъра, т.е., отидете на test.ru/? Подробности = 1 \" или natest.ru /? Подробности = 1 \ " ,

Ако грешката се появява на данните за въвеждане на съобщения, вашият сайт е уязвим за SQL инжекция.

ПРИМЕР грешки, възникнали в проверката на уязвимост

Практика. Опции хакерски уязвимост сайт за SQL инжекция

Така че, ние вече споменах test.ru. сайт Базата данни се съхранява 4 новини, от които са показани 3. Разрешение за публикуване на новини, зависи parmetra обществеността (ако параметъра съдържа стойността на 1, а след това новината публикуван).

Тестове от следните опции:
test.ru/?detail=4+OR+1
test.ru/?detail=4+-
test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4

В края на краищата, късмет и две искания (първия и третия) се върнаха, за да ни подробно описание на четвъртия новина

Разбор вътрешността на Пример

За подробно описание на новините отговаря блок от код:
$ Detail_id = $ _ GET [\ 'подробно \'];
$ Zapros = "SELECT * FROM` $ table_news` КЪДЕТО` public` = \ "1 \ 'Подреждане AND` id` = $ detail_id ОТ` position` Низходящо ";

Освен това, тя е настроена на $ detail_id без никакво лечение, така също и изграждане на `id` = $ detail_id писмено криво, че е по-добре да се придържаме to` id` = \ '$ detail_id \' (т.е. стойността сравнение да пиша в прави апострофи).

Търси по искане достигнеш до страницата чрез test.ru/?detail=4+OR+1

SELECT * от 'news` WHERE` public` = \ "1 \" И `id` = 4 или 1 РЕД BY` position` Низходящо

Това става съвсем ясно защо се покаже четвъртия новините. Фактът, че заявката връща всички записи от таблицата с новини, подредени в низходящ ред от върха. И по този начин нашето четвърто новина беше първата, тя е същата като на детайлите и се излюпили. Т.е. просто съвпадение.

Синтактичен разбор на заявката, генерирани при достъп чрез test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4.

Тук името на таблицата с новината (в този случай новината) е бил отведен в логическа изброяване.
Така че, заявка SELECT * FROM `news` WHERE` public` = \" 1 \ 'И `id` = 4 UNION SELECT * FROM новини КЪДЕ ИД = 4 ПОРЪЧКА BY` position` DESC. За нула резултат от първата част на искането (до СЪЮЗ) се присъедини резултат от втората част (след СЪЮЗ), връщайки се подробно описание четвъртото новини.

Защита срещу SQL инжектиране (SQL реализации)

Защита срещу кражба с взлом се намалява до основното правило на "доверие, но провери." Трябва да се провери всичко - числа, низове, дати, данни в специални формати.

За да се провери променливата на цифрова стойност се използва функция is_numeric (п), който се връща вярно, ако параметъра п - брой и фалшиви друго.
Вие не можете да проверите стойността на броя и вида на ръчна намеса. Ето един пример, който заменя стойността на $ ID, получен от $ _GET [\ 'id_news \'] до стойност от тип число (цяло число):
$ Id = (междинно съединение) $ _ GET [\ 'id_news \'];

Повечето влизане с взлом се появят чрез SQL поради остане в редовете на "неизчистените" в кавички, апострофи и други специални знаци. За такова изхвърляне е необходимо да използвате функцията addslashes (ул $);, която връща ул низ $ с добавена наклонената черта (\\) преди всеки специален знак. Този процес се нарича адаптация.

$ A = "пример за текст с апостроф \ '';
ехо addslashes ($ а); // ще бъдат показани: пример за текст с апостроф \\\ "

В допълнение, има две функции, създадени специално за филмовата адаптация на линиите, използвани в SQL отчети.
Тя mysql_escape_string (ул $); и mysql_real_escape_string (ул $).

Първият игнорира кодиране на връзка с база данни и може да бъде заобиколено, но второто го взема под внимание и е напълно безопасен. mysql_real_escape_string ($ ул); връща ул низ $ наклонена черта добавен в следните знаци: \\ x00, \\ N, \\ R, \\ \ ' "и \\ X1A.

Магически кавички

Магически кавички - ефект автоматични кавички подмяна на наклонена черта (\\) и цитат на операциите по I / O. В някои конфигурации, тази опция е включена в PHP, а други не. За да се избегнат двойните ekranizirovaniya герои zaekranizirovat данни в нормален път през mysql_real_escape_string ($ ул);, трябва да премахнете автоматичното поставяне наклонената черта (ако са включени магически кавички).

Проверка vklyuchonnosti магически кавички за данни, получени от GET, POST или Куков уредено чрез get_magic_quotes_gpc () функция; (Връща 1 - магически кавички, ако са включени, 0 - ако инвалиди).

Ако магически кавички vkyucheny (т.е. такива знака dobavlyaeyutsya) и е по-често, те трябва да бъдат отстранени. Това се постига чрез stripslashes функцията (ул $); (Връща ул низ $ без обратни наклонени черти в директни цитати и апострофи).

В zakyuchenii цитират прочетете пълната адаптация на реда за записване в DB

ако (get_magic_quotes_gpc () == 1)
$ ELEMENT_TITLE = stripslashes (тапицерия ($ _ POST [ "ELEMENT_TITLE"]));
$ Element_text = stripslashes (тапицерия ($ _ POST [ "element_text"]));
$ Element_date = stripslashes (подреден ($ _ POST [ "element_date"]));
>
още
$ ELEMENT_TITLE = подреден ($ _ POST [ "ELEMENT_TITLE"]);
$ Element_text = подреден ($ _ POST [ "element_text"]);
$ Element_date = подреден ($ _ POST [ "element_date"]);
>

$ ELEMENT_TITLE = mysql_real_escape_string ($ ELEMENT_TITLE);
$ Element_text = mysql_real_escape_string ($ element_text);
$ Element_date = mysql_real_escape_string ($ element_date);

SQL инжекция - това е един от най-достъпни начини за хакване на сайта.
Същността на тези инжекции - въвеждане на данни (прехвърля чрез GET, POST заявки или Cookie стойности) произволен SQL код. Ако даден сайт е уязвима и извършване на такава инжекция, в интерес на истината това е възможно да се създаде база данни (най-често MySQL) нищо.

Как да се изчисли уязвимост, която позволява да се въведе SQL инжекция?

Заявка за промяна на стигнем до? Подробности = 1 \ 'или? Подробности = 1 ". След това се опита да премине тези искания към сървъра, т.е., отидете на test.ru/? Подробности = 1 \" или natest.ru /? Подробности = 1 \ " ,

Ако грешката се появява на данните за въвеждане на съобщения, вашият сайт е уязвим за SQL инжекция.

ПРИМЕР грешки, възникнали в проверката на уязвимост

Практика. Опции хакерски уязвимост сайт за SQL инжекция

Така че, ние вече споменах test.ru. сайт Базата данни се съхранява 4 новини, от които са показани 3. Разрешение за публикуване на новини, зависи parmetra обществеността (ако параметъра съдържа стойността на 1, а след това новината публикуван).

Тестове от следните опции:
test.ru/?detail=4+OR+1
test.ru/?detail=4+-
test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4

В края на краищата, късмет и две искания (първия и третия) се върнаха, за да ни подробно описание на четвъртия новина

Разбор вътрешността на Пример

За подробно описание на новините отговаря блок от код:
$ Detail_id = $ _ GET [\ 'подробно \'];
$ Zapros = "SELECT * FROM` $ table_news` КЪДЕТО` public` = \ "1 \ 'Подреждане AND` id` = $ detail_id ОТ` position` Низходящо ";

Освен това, тя е настроена на $ detail_id без никакво лечение, така също и изграждане на `id` = $ detail_id писмено криво, че е по-добре да се придържаме to` id` = \ '$ detail_id \' (т.е. стойността сравнение да пиша в прави апострофи).

Търси по искане достигнеш до страницата чрез test.ru/?detail=4+OR+1

SELECT * от 'news` WHERE` public` = \ "1 \" И `id` = 4 или 1 РЕД BY` position` Низходящо

Това става съвсем ясно защо се покаже четвъртия новините. Фактът, че заявката връща всички записи от таблицата с новини, подредени в низходящ ред от върха. И по този начин нашето четвърто новина беше първата, тя е същата като на детайлите и се излюпили. Т.е. просто съвпадение.

Синтактичен разбор на заявката, генерирани при достъп чрез test.ru/?detail=4+UNION+SELECT+*+FROM+news+WHERE+id=4.

Тук името на таблицата с новината (в този случай новината) е бил отведен в логическа изброяване.
Така че, заявка SELECT * FROM `news` WHERE` public` = \" 1 \ 'И `id` = 4 UNION SELECT * FROM новини КЪДЕ ИД = 4 ПОРЪЧКА BY` position` DESC. За нула резултат от първата част на искането (до СЪЮЗ) се присъедини резултат от втората част (след СЪЮЗ), връщайки се подробно описание четвъртото новини.

Защита срещу SQL инжектиране (SQL реализации)

Защита срещу кражба с взлом се намалява до основното правило на "доверие, но провери." Трябва да се провери всичко - числа, низове, дати, данни в специални формати.

За да се провери променливата на цифрова стойност се използва функция is_numeric (п), който се връща вярно, ако параметъра п - брой и фалшиви друго.
Вие не можете да проверите стойността на броя и вида на ръчна намеса. Ето един пример, който заменя стойността на $ ID, получен от $ _GET [\ 'id_news \'] до стойност от тип число (цяло число):
$ Id = (междинно съединение) $ _ GET [\ 'id_news \'];

Повечето влизане с взлом се появят чрез SQL поради остане в редовете на "неизчистените" в кавички, апострофи и други специални знаци. За такова изхвърляне е необходимо да използвате функцията addslashes (ул $);, която връща ул низ $ с добавена наклонената черта (\\) преди всеки специален знак. Този процес се нарича адаптация.

$ A = "пример за текст с апостроф \ '';
ехо addslashes ($ а); // ще бъдат показани: пример за текст с апостроф \\\ "

В допълнение, има две функции, създадени специално за филмовата адаптация на линиите, използвани в SQL отчети.
Тя mysql_escape_string (ул $); и mysql_real_escape_string (ул $).

Първият игнорира кодиране на връзка с база данни и може да бъде заобиколено, но второто го взема под внимание и е напълно безопасен. mysql_real_escape_string ($ ул); връща ул низ $ наклонена черта добавен в следните знаци: \\ x00, \\ N, \\ R, \\ \ ' "и \\ X1A.

Магически кавички

Магически кавички - ефект автоматични кавички подмяна на наклонена черта (\\) и цитат на операциите по I / O. В някои конфигурации, тази опция е включена в PHP, а други не. За да се избегнат двойните ekranizirovaniya герои zaekranizirovat данни в нормален път през mysql_real_escape_string ($ ул);, трябва да премахнете автоматичното поставяне наклонената черта (ако са включени магически кавички).

Проверка vklyuchonnosti магически кавички за данни, получени от GET, POST или Куков уредено чрез get_magic_quotes_gpc () функция; (Връща 1 - магически кавички, ако са включени, 0 - ако инвалиди).

Ако магически кавички vkyucheny (т.е. такива знака dobavlyaeyutsya) и е по-често, те трябва да бъдат отстранени. Това се постига чрез stripslashes функцията (ул $); (Връща ул низ $ без обратни наклонени черти в директни цитати и апострофи).

В zakyuchenii цитират прочетете пълната адаптация на реда за записване в DB

ако (get_magic_quotes_gpc () == 1)
$ ELEMENT_TITLE = stripslashes (тапицерия ($ _ POST [ "ELEMENT_TITLE"]));
$ Element_text = stripslashes (тапицерия ($ _ POST [ "element_text"]));
$ Element_date = stripslashes (подреден ($ _ POST [ "element_date"]));
>
още
$ ELEMENT_TITLE = подреден ($ _ POST [ "ELEMENT_TITLE"]);
$ Element_text = подреден ($ _ POST [ "element_text"]);
$ Element_date = подреден ($ _ POST [ "element_date"]);
>

$ ELEMENT_TITLE = mysql_real_escape_string ($ ELEMENT_TITLE);
$ Element_text = mysql_real_escape_string ($ element_text);
$ Element_date = mysql_real_escape_string ($ element_date);

Свързани статии

Подкрепете проекта - споделете линка, благодаря!