Средства за защита на входните данни
2GOOD4U :: ОТДЕЛ "ЧИСТОТА" :: Архив :: Стари теми :: HACK FORUM BG :: РЪКОВОДСТВА :: Защита на сайтове
Страница 1 от 1
Средства за защита на входните данни
Какво означава SQL инжекция?
SQL инжекциите са начин за променяне на заявката ви към базата данни.
MySQL, MSSQL или друга няма значение. Ето нагледен пример за SQL
инжекция:
Първоначално в тестов скрипт има заявка за извеждане на данни от MySQL според id, подадено чрез GET.
Ето я заявката:
ЦитатSELECT * FROM tablica WHERE id = '$id'
При нормално изпълнение на скрипта променливата $id ще съдържа номер,
но ако някой напише на мястото на цифрата това: 5'; DROP TABLE tablica;
-- ще може да ви съсипе цялата база данни. Тази инжекция използва GET
(променливи подадени чрез http адреса). Може да се направи чрез POST,
SESSION, COOKIE и дори SERVER ако ги използватe в скриптовете си.
Сега ще започнем с различните начини да се предпазим от този и други
видове атаки. Това са различни функции, които по един или друг начин
модифицират входният текст, за да го направят безвреден за вашият
скрипт. Ще обясня действието на тези функции.
htmlspecialchars($tekst);
Променя текста, като замeства всички специални символи за HTML като <
> % & " и други с техните аналози в HTML. Това ги променя така,
че те могат да се виждат в браузера, но той няма да ги счита за HTML и
те няма да се изпълнят. Това предпазва от този тип "атаки", които
прехвърлят потребителя към други страници. Те подават HTML, а тази
функция го неутрализира.
strip_tags($tekst);
Променя текста, като изтрива всякакви HTML тагове. НО, информацията
която се подава бива доста осакатена. Дори при потребителски имена от
типа на няма да остане нищо. Препоръчвам ви да не я
използвате освен ако не сте 100% сигурни, че такива текстове няма да се
въвеждат. Например при подаване на URL адреси.
trim($tekst);
Много опасна функция. Премахва всички празни места, таблуации, нови
редове и други подобни. Много внимавайте с нея. Използвайте я само в
данни, които сте сигурни, че НЯМА да има празни места. Освен това не
прави особена защита.
addslashes($tekst);
Основната защита срещу SQL инжекции. Слага \ пред всички кавички, така че SQL да ги игнорира. Винаги трябва да я имате.
Strip_tags(); и htmlspecialchars(); е няпълно Безсмислено да се
използват заедно в какъвто и да е ред. Използвайте или едната или
другата функция. По-добре htmlspecialchars();
Най-добрата комбинация е htmlspecialchars и addslashes. Така сте напълно
защитени. Не се лъжете от това, което някои казват, че повече функции
било по-добре защита. С повече функции можете само да си прецакате
скрипта.
Понякога е достатъчно само да проверите дали променливата е число или не. Това става много лесно:
Цитат$var = 555;
if ( (int)$var )
echo "Променливата е число";
else
echo "Променливата НЕ е число";
По принцип трябва за всяка променлива да изпълнявате тези функции, но аз
ви предлагам по-компактно решение. Този скрипт ще обходи всички входни
данни и ще ги направи безвредни за вашите кодове. Достатъчно е само да
го сложите в отделен файл и да инклудвате този файл във всеки ваш скрипт
в самото начало.
Цитатfunction za6titi($tekst)
{
if ( (int)$tekst )
return $tekst;
else
{
$tekst = addslashes($tekst);
$tekst = htmlspecialchars($tekst, ENT_NOQUOTES);
return $tekst;
}
}
$_GET = array_map("za6titi", $_GET);
$_POST = array_map("za6titi", $_POST);
$_SESSION = array_map("za6titi", $_SESSION);
$_COOKIE = array_map("za6titi", $_COOKIE);
$_SERVER = array_map("za6titi", $_SERVER);
?>
SQL инжекциите са начин за променяне на заявката ви към базата данни.
MySQL, MSSQL или друга няма значение. Ето нагледен пример за SQL
инжекция:
Първоначално в тестов скрипт има заявка за извеждане на данни от MySQL според id, подадено чрез GET.
Ето я заявката:
ЦитатSELECT * FROM tablica WHERE id = '$id'
При нормално изпълнение на скрипта променливата $id ще съдържа номер,
но ако някой напише на мястото на цифрата това: 5'; DROP TABLE tablica;
-- ще може да ви съсипе цялата база данни. Тази инжекция използва GET
(променливи подадени чрез http адреса). Може да се направи чрез POST,
SESSION, COOKIE и дори SERVER ако ги използватe в скриптовете си.
Сега ще започнем с различните начини да се предпазим от този и други
видове атаки. Това са различни функции, които по един или друг начин
модифицират входният текст, за да го направят безвреден за вашият
скрипт. Ще обясня действието на тези функции.
htmlspecialchars($tekst);
Променя текста, като замeства всички специални символи за HTML като <
> % & " и други с техните аналози в HTML. Това ги променя така,
че те могат да се виждат в браузера, но той няма да ги счита за HTML и
те няма да се изпълнят. Това предпазва от този тип "атаки", които
прехвърлят потребителя към други страници. Те подават HTML, а тази
функция го неутрализира.
strip_tags($tekst);
Променя текста, като изтрива всякакви HTML тагове. НО, информацията
която се подава бива доста осакатена. Дори при потребителски имена от
типа на
използвате освен ако не сте 100% сигурни, че такива текстове няма да се
въвеждат. Например при подаване на URL адреси.
trim($tekst);
Много опасна функция. Премахва всички празни места, таблуации, нови
редове и други подобни. Много внимавайте с нея. Използвайте я само в
данни, които сте сигурни, че НЯМА да има празни места. Освен това не
прави особена защита.
addslashes($tekst);
Основната защита срещу SQL инжекции. Слага \ пред всички кавички, така че SQL да ги игнорира. Винаги трябва да я имате.
Strip_tags(); и htmlspecialchars(); е няпълно Безсмислено да се
използват заедно в какъвто и да е ред. Използвайте или едната или
другата функция. По-добре htmlspecialchars();
Най-добрата комбинация е htmlspecialchars и addslashes. Така сте напълно
защитени. Не се лъжете от това, което някои казват, че повече функции
било по-добре защита. С повече функции можете само да си прецакате
скрипта.
Понякога е достатъчно само да проверите дали променливата е число или не. Това става много лесно:
Цитат$var = 555;
if ( (int)$var )
echo "Променливата е число";
else
echo "Променливата НЕ е число";
По принцип трябва за всяка променлива да изпълнявате тези функции, но аз
ви предлагам по-компактно решение. Този скрипт ще обходи всички входни
данни и ще ги направи безвредни за вашите кодове. Достатъчно е само да
го сложите в отделен файл и да инклудвате този файл във всеки ваш скрипт
в самото начало.
Цитатfunction za6titi($tekst)
{
if ( (int)$tekst )
return $tekst;
else
{
$tekst = addslashes($tekst);
$tekst = htmlspecialchars($tekst, ENT_NOQUOTES);
return $tekst;
}
}
$_GET = array_map("za6titi", $_GET);
$_POST = array_map("za6titi", $_POST);
$_SESSION = array_map("za6titi", $_SESSION);
$_COOKIE = array_map("za6titi", $_COOKIE);
$_SERVER = array_map("za6titi", $_SERVER);
?>
hARDCORE- Power user
- Zodiac : Брой мнения : 297
Отсенка : 1337
Rep : 10
Регистриран на : 13.01.2010
Age : 27
Местожителство : PLOVDIV
точки
точки:
(652/1000)
Similar topics
» Защита от RFI(Remote File Inclusion)
» Защита от XSS (накратко
» Xampp защита от DOS
» Защита от SQLi(SQL Injection)
» Phpbb3 Цялостна Защита На Админ Панел.(Подробно Обяснено).
» Защита от XSS (накратко
» Xampp защита от DOS
» Защита от SQLi(SQL Injection)
» Phpbb3 Цялостна Защита На Админ Панел.(Подробно Обяснено).
2GOOD4U :: ОТДЕЛ "ЧИСТОТА" :: Архив :: Стари теми :: HACK FORUM BG :: РЪКОВОДСТВА :: Защита на сайтове
Страница 1 от 1
Права за този форум:
Не Можете да отговаряте на темите
|
|