Защита от SQL Injection

Xorix

Новичок
Защита от SQL Injection

Всем привет!

Скажите пожалуйста, поможет ли от SQL Injection такой код:
if (empty($id)) {$id=1;};
if (strlen($id) > 5)
{
exit();
};
$id=htmlspecialchars($id);

$id=intval($id);

Чего еще нужно бояться кроме SQL Injection?

С уважением! Всем спасибо
 

Oldwin

Новичок
У тебя id должно быть числом? Вот и приводи его к числу.
 

Фанат

oncle terrible
Команда форума
Скажите пожалуйста, поможет ли от SQL Injection такой код:
нет. этого явно недостаточно.
как минимум, надо ещё применить функции base64_encode, md5, sha1, и обязательно - array_filter

Чего еще нужно бояться кроме SQL Injection?
бойся незнакомца с одной ногой!
 

Xorix

Новичок
Автор оригинала: Oldwin
У тебя id должно быть числом? Вот и приводи его к числу.
Я его привел вот так: $id=intval($id);

Это правильно? А что касается ковычек?
 

Xorix

Новичок
Автор оригинала: Гравицапа
Xorix
Почитай материал по ссылке, что привел phprus
Я его прочел еще раньше. Но мне хотелось узнать мнение профессионалов. Опасен ли такой скрипт (вернее его часть)?
 

Гравицапа

elbirret elcno
Xorix
Значит прочитай ещё раз, что понять что такое на самом деле SQL инъекция и какая методика защиты от неё.
 

Xorix

Новичок
Тогда сформулирую вопрос иначе:

Как грамотно и безопасно получить значение переменной ID методом GET с последующей подстановкой в запрос?

-~{}~ 07.03.07 17:43:

Подскажите пожалуйста! оЧень нужно
 

Фанат

oncle terrible
Команда форума
значение переменной ID, полученной методом GET, абсолютно никакой опасности, само по себе, не несёт.

какие ещё будут вопросы?
 

Popoff

popoff.donetsk.ua
Xorix
Помню, что по той ссылке, вроде как было всё описано. Но ты так настойчиво спрашиваешь, что я аж засомневался и сходил по той ссылке, прочитал ещё раз. Действительно, там всё описано.
 

Фанат

oncle terrible
Команда форума
Popoff
Нот тут тонкий момент. К получению переменных методом GET тот текст не имеет практически никакого отношения. И вот именно его, как раз, очень многие не видят в упор

-~{}~ 07.03.07 17:52:

Надо ещё признать тот неприятный факт, что в первые два года существования текста по ссылке, такая связь там устанавливалась, и весьма прочная.
 

Popoff

popoff.donetsk.ua
Фанат
Я прочитал заголовок топика и подумал, что речь идёт об sql-запросах, а не о методе GET. Возможно, именно это и ввело меня в заблуждение. Потому что об sql-инъекциях в той статье написано как раз то, что я ожидал там увидеть.

Я, кстати, никогда не понимал, что прячется под термином "получение переменных методом Х". Если под ним прячется процесс заполнения суперглобального массива интерпретатором РНР (и/или всё, что предшествует этому), то, как-то вообще все всё странно говорят; есть подозрение, что многие не подозревают о том, что это вообще за процесс такой. Думаю, автор топика не знает об этом процессе. Но думаю также, что в принципе, оно ему не очень то и нужно. Ничего же не требуется писать в программе на РНР, чтобы заполнить этот суперглобальный массив. И настраивать тоже, в общем-то, ничего не нужно...

Если под этим термином прячется доступ к элементу массива, что более вероятно, то тогда следовало бы придумать, как назвать такой метод получения переменных:
$my_array['my_field']
:)

-~{}~ 07.03.07 17:54:

По логике, этот способ будет называться так: "получение переменных методом my_array" :)
 

Фанат

oncle terrible
Команда форума
Ну заголовок-то, как раз, понятен.
Защита от SQL Injection в головах 99% программистов связана ТОЛЬКО с проверкой переменных from outside.
 

Popoff

popoff.donetsk.ua
Фанат
Ну так ответ же в том и состоит, что никакие переменные не нужно проверять? Просто берём и правильно подставляем в запрос. Как по той ссылке описано.

Кстати, если эта связь существует, почему ты не добавишь какую-нибудь выпуклую фразу, которая явно бы говорила, что нужно вот таким способом поступать со всеми переменными, а не только с пришедшими извне? И раз уж там затрагивается вопрос sql-инъекций и слешей, то, думаю, было бы к месту упомянуть о sql-инъекциях второго порядка, о которых многие забывают. По крайней мере, пару фраз, что вот, мол и такое тоже может возникнуть.
 

Фанат

oncle terrible
Команда форума
сейчас там написано так
прослешивать нам надо не только пришедшие от пользователя данные, а вообще любые, вставляемые в запрос - многим этот очевидный факт даже не приходил в голову!
 
Сверху