Въпроси относно защита :)

Zion

Registered
Здравейте, питанката ми е следната

Когато вкарвам данни или изкарвам от база данни чрез ГЕТ променлива и задам стойност на $id следното

$id = (int)$_GET['id'];

има ли възможност да ми бъде атакуван сайта

говоря ако няма проверка с if ами направо с $id = (int)$_GET['id'];
 
еми ако id=a чрез инт ще ти върне 0 защото текст като се конвертира кам инт формат се получава 0 така че няма проблем
 
Може да бъде атакуван сайта, да се вкара шел, да се изтрие базата данни и да се изпълнят всякакви заявки.
Затова е добре всички входни данни да се обработват преди ползването им, за да се предотврарят такива моменти.

Проверката която е подходяща е:
Код:
if (isset($_GET['id'])) {
   $id = $_GET['id'];
    if (is_numeric($id) == FALSE ) {
        header('Location: somepage.php');
    }
}

При този код, ако е зададено ГЕТ ид ще се провери дали е число и ако НЕ е число - ще се извика дадена страница за грешка и кода няма да продължи нататък.

Ако го правиш чрез кастване на променливата (int) - текстова информация ще бъде превърната в 0 и след това ще ти даде даде грешка при заявката когато извикаш ред от базата данни - ИД с номер 0, който няма да съществува примерно.
 
А как ще станат следните работи:
Ако ид-то не е число ами с думи как да се защити и ако е число и ако е 1а как да изкарва ид-то което е 1
 
Dodo1987 - не питах каква да е проверката а дали това което правя аз е достатъчно като защита при изкарването и вкарването на числа :)
Ако съдя по това което казвате че го превръща в 0 значи би трябвало да е достатъчно :)?
 
Zion каза:
Dodo1987 - не питах каква да е проверката а дали това което правя аз е достатъчно като защита при изкарването и вкарването на числа :)
Ако съдя по това което казвате че го превръща в 0 значи би трябвало да е достатъчно :)?
Достатъчно е , ако правиш проверка дали съществува такова ID.
 
еми не виж сега ти и по 1000 начина да го направиш да си сигурен че в цифров формат пак не може да си сигурен че той няма да напише ид от сорта на 100000000000000000000000000 за тва ти говори че трябва да проверяваш дали има статия с това ид иначе с (int) може да си на 100% сигурен че ще получиш число
 
Dodo1987 каза:
Може да бъде атакуван сайта, да се вкара шел, да се изтрие базата данни и да се изпълнят всякакви заявки.
Затова е добре всички входни данни да се обработват преди ползването им, за да се предотврарят такива моменти.

Проверката която е подходяща е:
Код:
if (isset($_GET['id'])) {
   $id = $_GET['id'];
    if (is_numeric($id) == FALSE ) {
        header('Location: somepage.php');
    }
}

При този код, ако е зададено ГЕТ ид ще се провери дали е число и ако НЕ е число - ще се извика дадена страница за грешка и кода няма да продължи нататък.

Ако го правиш чрез кастване на променливата (int) - текстова информация ще бъде превърната в 0 и след това ще ти даде даде грешка при заявката когато извикаш ред от базата данни - ИД с номер 0, който няма да съществува примерно.
(int) е достатъчно :)
Но ако ползваш този код някъде веднага го промени, защото не пази
Сложи exit; след header-a
header не спира кода надолу, едно че ще се изпълни и след това ще редиректне, друго че мога да подмина Location-а със curl
 
sorRy каза:
еми не виж сега ти и по 1000 начина да го направиш да си сигурен че в цифров формат пак не може да си сигурен че той няма да напише ид от сорта на 100000000000000000000000000 за тва ти говори че трябва да проверяваш дали има статия с това ид иначе с (int) може да си на 100% сигурен че ще получиш число

при самата заявка само нз какъв проблем ще му направи като напише невалидно ид просто няма да му искара никакъв резултат и ако е написана правилно заявката би трябвало дане му искара грешка но въпреки това е хубаво да се мине и прес if()
 

Back
Горе