sql injection атака..

vasilev

Registered
здравейте ,
преди два дни гледам някакъв е влизал и е направил 2000 заявки като в базата са все записи от рода !*(*(!@(SQL>.. и тем подобни .
в някой полета където не са Input а selectbox пак има такива данни .
моля препоръчайте ми как да се предпазя от такива нежелани атаки .

в момента съм сложил ип то му в deny на htaccess , не бях сложил и captcha и сложих , филтрирал съм пост заявките : $heading = htmlspecialchars($_POST["heading"]);

може ли да се направи лимит за пост заявка - тоест да не може да поства повече от един път или два пъти последователно ..
 
Просто си проверяй отвсякъде данните. Ако знаеш, че трябва да е число правиш intval($var), също така използвай фунцкията mysql_real_escape_string($var). Още по-добре ще е, ако използваш mysqli prepared statements, защото премахват възможността за sqli.
 
Не филтрирай данните само с htmlspecialcharts а и с addslashes и на места trim !

addslashes(htmlspecialchars(trim($_POST["heading"])));
 
имам няколко вида данни ,
едните са - datetime , другите са текст , другите са число - randomid .
на всичките ли да им сложа addslashes(htmlspecialchars(trim())) , на числото intval() , а датата ?

и има ли някаква настройка за лимит sql заявки от едно ip за единица време .
 
vasilev каза:
имам няколко вида данни ,
едните са - datetime , другите са текст , другите са число - randomid .
на всичките ли да им сложа addslashes(htmlspecialchars(trim())) , на числото intval() , а датата ?

и има ли някаква настройка за лимит sql заявки от едно ip за единица време .

Trim не се слага навсякъде но примерно за полетата на user pass става ! Ще трябва понякога и само с (int) да проверяваш !

http://web-tourist.net/login/login/view.php?st=2418
Прочети това :)
 
dakata__92 каза:
vasilev каза:
имам няколко вида данни ,
едните са - datetime , другите са текст , другите са число - randomid .
на всичките ли да им сложа addslashes(htmlspecialchars(trim())) , на числото intval() , а датата ?

и има ли някаква настройка за лимит sql заявки от едно ip за единица време .

Trim не се слага навсякъде но примерно за полетата на user pass става ! Ще трябва понякога и само с (int) да проверяваш !

http://web-tourist.net/login/login/view.php?st=2418
Прочети това :)
И защо пък да не се слага?Какъв е смисъла от интервали в началото и края?
 
Прочети за PDO и няма да имаш ядове. Тези гимнастики са вече остарели. Модата е PDO.
 
fbian каза:
dakata__92 каза:
vasilev каза:
имам няколко вида данни ,
едните са - datetime , другите са текст , другите са число - randomid .
на всичките ли да им сложа addslashes(htmlspecialchars(trim())) , на числото intval() , а датата ?

и има ли някаква настройка за лимит sql заявки от едно ip за единица време .

Trim не се слага навсякъде но примерно за полетата на user pass става ! Ще трябва понякога и само с (int) да проверяваш !

http://web-tourist.net/login/login/view.php?st=2418
Прочети това :)
И защо пък да не се слага?Какъв е смисъла от интервали в началото и края?
Да речем, че въвеждаш в текстово поле някакъв голям текст и искаш да започнеш както са ни учили в училище 2 пръста навътре :) Не навсякъде е нужен trim !
 
dakata__92 каза:
fbian каза:
dakata__92 каза:
Trim не се слага навсякъде но примерно за полетата на user pass става ! Ще трябва понякога и само с (int) да проверяваш !

http://web-tourist.net/login/login/view.php?st=2418
Прочети това :)
И защо пък да не се слага?Какъв е смисъла от интервали в началото и края?
Да речем, че въвеждаш в текстово поле някакъв голям текст и искаш да започнеш както са ни учили в училище 2 пръста навътре :) Не навсякъде е нужен trim !

Еми има trim, rtrim, ltrim, имат си charlist и т.н. Като се използват правилно са ефективни, иначе рядко ще намерите файда от тях.
 
Така е ! Примерно при въвеждане на буквена каптча е хубаво да имаш trim или при ник на абонат за да не се запамети с интервала пред него :) Въпрос на виждане е :)
 
Когато е число ги филтрираш така:

PHP:
$id = (int) $_GET['id'];
if ($id > 0) {
//TODO koda natakat...
}

Така се предпазваш когато е число а когато е текст:

PHP:
$user = addslashes(htmlspecialchars(trim($_POST['userName'])));
if (empty($user)) {
  //TODO saob6tenie za gre6ka
} else {
//TODO koda natatak...
}

И ето така ламерите или по-точно тези които се правят на хакери няма шанс да те дефейснат с sql injection....
 

Горе