SQL Injection - вопрос безопасности

Vladson

Сильнобухер
Автор оригинала: igortik
осмелюсь не согласиться, спорить тоже не буду, т.к. я дааалеко не профи, но пока что эту проверку не убрал
И не убирайте пока (она работает хорошо) просто в можно реализовать тоже самое намного "красивее"...

Автор оригинала: igortik
4) Правильно составлять SQL запросы, пример:

PHP:
$string = mysql_real_escape_string($_GET['string']);
INSERT INTO `table` WHERE `type`='$string';
...
Да практически так, только не нужно забывать про "волшебные" кавычки

PHP:
$string = magic_quotes_gpc() ? stripslashes($_GET['string']) ? $_GET['string'];
$string = mysql_real_escape_string($_GET['string']);
Доп-инфо читать тут http://www.phpfaq.ru/slashes
 

WoZ

Новичок
Автор оригинала: *****
WoZ
У тебя в голове много правильных слов, но вот применение найти им правильное у тебя получается с трудом.
если ограничение на длину поля с номером карточки будет обойдено юзером - это проблемы юзера.

У тебя какой вопрос был? Безопасность базы данных или конкретные проверки в конкретном приложении?
Если первый, то и занимайся первым. А частными вопросами - сколько цифр можно вводить в поле с номером телефона - тему не засоряй.
давай кончать разводить перепалки в ветках. мне лично надоело уже. когда по факту что-то сможешь предъявить или уличить в моей неправоте - милости прошу в личку
 

igortik

Новичок
Автор оригинала: *****
igortik
А можно я тебе вопросы позадаю?

1) почему? желательно развернутый ответ.

2) чем отличаются "все входящие" от "переменных, которые скрипт получает через $_GET"?
1) Я так понял, что если не экранировать, то скрипту через форму можно передать данные, которые повлияют на функции самого скрипта при внесении (выборке) из базы при подстановке в тело самого запроса, например:

$_POST['password'] = "' OR ''='"

и в базу пойдет: SELECT * FROM users WHERE name='aidan' AND password='' OR ''='';
таким образом вход осуществляется без пароля.

2) Тут сглупил, $_GET и так извне.
 

Фанат

oncle terrible
Команда форума
А если данные извне не попадают в базу? А, скажем - по емейлу отправляются. Все равно экранировать?

И ты не ответил на третий вопрос.
 

igortik

Новичок
Автор оригинала: Vladson
...
Благодарю за совет, буду разбираться!

-~{}~ 16.10.07 23:49:

Автор оригинала: *****
А если данные извне не попадают в базу? А, скажем - по емейлу отправляются. Все равно экранировать?

И ты не ответил на третий вопрос.
3) Там еще мне нужно разобраться.

по поводу отправки по e-mail не вижу смысла экранировать.

P.S. с другой стороны, если отправляемое поле text передает переменной $text значение на подобии """''', то скрипт будет выполнен с ошибкой.

Тут ты меня завел в тупик.

-~{}~ 17.10.07 00:03:

Автор оригинала: Vladson

Да практически так, только не нужно забывать про "волшебные" кавычки

PHP:
$string = magic_quotes_gpc() ? stripslashes($_GET['string']) ? $_GET['string'];
$string = mysql_real_escape_string($_GET['string']);
В моем случае у хостера

magic_quotes_gpc - off
magic_quotes_runtime - off
 

Фанат

oncle terrible
Команда форума
igortik
По ссылке, которую ты, по твоему утверждению, читал, написано:
Сначала отключим волшебные кавычки. Так, как это описано в самом начале.
Почему это следует сделать?
По многим причинам. Самая очевидная - логическая. "Волшебные кавычки" добавляют слеши не там, где они нужны - при составлении запроса, а еще до попадания в скрипт! Но ведь данные совсем не обязательно после этого будут вставляться в запрос. Может быть, их придётся выводить пользователю, и слеши будут только мешать. Плюс к тому, добавленные слеши помешают, к примеру, правильно проверить длину введённой строки. К тому же, прослешивать нам надо не только пришедшие от пользователя данные, а вообще любые, вставляемые в запрос - многим этот очевидный факт даже не приходил в голову! Список можно продолжать, но вывод один: добавлять слеши надо не автоматом, без разбору, до начала выполнения скрипта, а только там, где действительно надо – при составлении запроса.
Скажи, тебе что-то в этом абзаце непонятно? Здесь написано, что все приходящие данне надо экранировать?
 

igortik

Новичок
Автор оригинала: *****
igortik

Скажи, тебе что-то в этом абзаце непонятно? Здесь написано, что все приходящие данне надо экранировать?
только при запросе.

Теперь все становится на свои места.
 
Сверху