Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Мелочи]Обработка входящих данных , с помощью mysql_escape_string: стоит ли? 
:(
    Опции темы
m1kle
Дата 16.11.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



Есть одна мелочь.
Как лучше писать
Код

$e=$_GET['e']; $e = mysql_escape_string($e); 
// или 
$e=mysql_escape_string($_GET['e']);

$t=mysql_escape_string($_SESSION['username']);
// или 
$t=$_SESSION['username'];
$t=mysql_escape_string($t);

и почему?
PM MAIL WWW MSN   Вверх
skyboy
Дата 16.11.2007, 00:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Будь добр, в следующий раз называй тему адекватнее. Невнятно названные темы будут удаляться
Короткий ответ на вопрос: безразлично, в какой из двух вариантов форме писать.
Развернутый ответ: ни так, ни так писать не надо.
Во-первых, mysql_escape_string - морально устаревшая функция. Вместо неё надо использовать mysql_real_escape_string, которая безопаснее и надежнее.
Во-вторых, функция используется перед вставкой переменной в динамически формируемый запрос к MySQL. Для других целей лучше использовать другие средства.
mysql_real_escape_string экранирует 
Цитата

\x00, \n, \r, \, ', " и \x1a
Таким образом исключается ситуация, вроде такой:
Код

$name= 'Вася "Горилла" Пупкин';
$sql= 'SELECT * FROM `table` WHERE `name` = "'.$name.'"';
mysql_query($sql);

в случае чего будет попытка выполнения следующего запроса:
Код

SELECT  * FROM `table` WHERE `name` = "Вася "Горилла" Пупкин"

Благодаря подсветке синтаксиса, сходу видно, что работать нормально такой запрос не будет.
Вот при формировании запроса эту функцию и используй.
Кроме того, у тебя недочет:
Код

$e= $_GET['e'];

вернет ошибку(точнее - предупреждение/Warning) если скрипту через GET не был передан параметр "е". Потому лучше сделать проверку на isset. Впрочем, ещё лучше - не запихивать в отдельную переменную значение, которое и так у тебя никуда не денется($_GET).


Это сообщение отредактировал(а) skyboy - 16.11.2007, 00:45
PM MAIL   Вверх
vasac
Дата 16.11.2007, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



В чем глубинный смысл вопроса?
Писать две инструкции в одной строке или на двух?
PM WWW   Вверх
skyboy
Дата 16.11.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



vasac, видимо - проверять данные при получении или уже перед использованием smile
PM MAIL   Вверх
m1kle
Дата 16.11.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



спасибо. Буду теперь использовать mysql_real_escape_string а нет ли на этом форуме темы, где написаны различия между mysql_escape_string() и mysql_real_escape_string()
PM MAIL WWW MSN   Вверх
kasmanaft
Дата 16.11.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 16.11.2007

Репутация: 1
Всего: 2



Если верить мануалу, mysql_escape_string() идентична mysql_real_escape_string(), исключая то, что mysql_real_escape_string() принимает параметром ещё и указатель на соединение и экранирует в зависимости от кодировки. mysql_escape_string() не делает этого и результат работы не зависит от кодировки, в который вы работаете с БД.

PS я бы еще посоветовал перед применением этих функций, проверить, включены ли магические кавычки (get_magic_quotes_gpc()). А то, может быть, экранировать ничего и не надо. (а может быть, лучше будет в данном случае на входе применить stripslashes(), а уже на выводе mysql_real_escape_string() ).
PM MAIL   Вверх
m1kle
Дата 16.11.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



kasmanaft, во первых не понимаю смысл экранировать. Если выводить на экран, или подсвечивать - то это не нужно, я думал mysql_real_escape_string(); - надежнее или новее. Мне это для селектов, или для инсертов, не для выводов.
PM MAIL WWW MSN   Вверх
SelenIT
Дата 16.11.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(m1kle @  16.11.2007,  22:30 Найти цитируемый пост)
во первых не понимаю смысл экранировать. ... Мне это для селектов, или для инсертов, не для выводов.

Для них экранировать и нужно, почему - см. ответ skyboyя или PHP FAQ:  \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек.

Цитата(m1kle @  16.11.2007,  22:30 Найти цитируемый пост)
mysql_real_escape_string(); - надежнее или новее

Можно сказать и так smile

Цитата(kasmanaft @  16.11.2007,  21:31 Найти цитируемый пост)
может быть, лучше будет в данном случае на входе применить stripslashes(), а уже на выводе mysql_real_escape_string()

Действительно лучше, т.к. поведение magic_quotes зависит и от других настроек (подробнее в FAQ выше).


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
m1kle
Дата 16.11.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



SelenIT, стоп. Зачем на выходе что то делать вообще? Если записалось по нормальному. то и выведется по нормальному.
PM MAIL WWW MSN   Вверх
SelenIT
Дата 17.11.2007, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



m1kle, смотря что и куда выводить. Если текст сомнительного происхождения (напр. запись в гостевой или форуме) выводится на HTML-странице, то нужно учесть, что злоумышленник мог вписать туда, например, яваскрипт, который ворует авторизационную куку юзера и отсылает на чужой сервер. Это называется XSS-уязвимость. Или просто навставлять левого HTML (напр. кучу закрывающих </td></table>) и поломать дизайн страницы. Чтобы подобный фокус не мог сработать, нужно как-то обработать текст перед выводом - проще всего с помощью htmlspecialchars.

Это сообщение отредактировал(а) SelenIT - 17.11.2007, 00:51


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
m1kle
Дата 17.11.2007, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



на htmlspecialchars я проверяю
PM MAIL WWW MSN   Вверх
m1kle
Дата 17.11.2007, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 2.5.2007
Где: Москва, Россия

Репутация: нет
Всего: нет



А mysql_real_escape_string() так же как и mysql_escape_string() следует использовать на входе, а не на выходе.
PM MAIL WWW MSN   Вверх
SelenIT
Дата 17.11.2007, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Конечно. Это ж по сути то же самое, только "более новое и надежное";)

А еще точнее - не "на входе", а при подстановке данных в SQL-запрос.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
kasmanaft
Дата 17.11.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 16.11.2007

Репутация: 1
Всего: 2



Цитата(m1kle @  16.11.2007,  22:30 Найти цитируемый пост)
kasmanaft, во первых не понимаю смысл экранировать. Если выводить на экран, или подсвечивать - то это не нужно, я думал mysql_real_escape_string(); - надежнее или новее. Мне это для селектов, или для инсертов, не для выводов.

Да, извиняюсь, неправильно выразился.. На выводе, конечно же, нужно применять htmlspecialchars(), а при запросе чего-либо в БД - mysql_real_escape_string().

...предварительно очистив полученные данные функцией stripslashes(). (если включены магические кавычки)

Это сообщение отредактировал(а) kasmanaft - 17.11.2007, 10:29
PM MAIL   Вверх
skyboy
Дата 17.11.2007, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(kasmanaft @  17.11.2007,  09:26 Найти цитируемый пост)
если включены магические кавычки

и так ко всем входящим данным stripslashes применять? не проще ли отказаться от magic quotes, используя set_magic_quotes_runtime?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1061 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.