![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Есть одна мелочь.
Как лучше писать
и почему? |
|||
|
||||
skyboy |
|
||||||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Будь добр, в следующий раз называй тему адекватнее. Невнятно названные темы будут удаляться
Короткий ответ на вопрос: безразлично, в какой из двух вариантов форме писать. Развернутый ответ: ни так, ни так писать не надо. Во-первых, mysql_escape_string - морально устаревшая функция. Вместо неё надо использовать mysql_real_escape_string, которая безопаснее и надежнее. Во-вторых, функция используется перед вставкой переменной в динамически формируемый запрос к MySQL. Для других целей лучше использовать другие средства. mysql_real_escape_string экранирует
в случае чего будет попытка выполнения следующего запроса:
Благодаря подсветке синтаксиса, сходу видно, что работать нормально такой запрос не будет. Вот при формировании запроса эту функцию и используй. Кроме того, у тебя недочет:
вернет ошибку(точнее - предупреждение/Warning) если скрипту через GET не был передан параметр "е". Потому лучше сделать проверку на isset. Впрочем, ещё лучше - не запихивать в отдельную переменную значение, которое и так у тебя никуда не денется($_GET). Это сообщение отредактировал(а) skyboy - 16.11.2007, 00:45 |
||||||||
|
|||||||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
В чем глубинный смысл вопроса?
Писать две инструкции в одной строке или на двух? |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
vasac, видимо - проверять данные при получении или уже перед использованием
![]() |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
спасибо. Буду теперь использовать mysql_real_escape_string а нет ли на этом форуме темы, где написаны различия между mysql_escape_string() и mysql_real_escape_string()
|
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 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() ). |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
kasmanaft, во первых не понимаю смысл экранировать. Если выводить на экран, или подсвечивать - то это не нужно, я думал mysql_real_escape_string(); - надежнее или новее. Мне это для селектов, или для инсертов, не для выводов.
|
|||
|
||||
SelenIT |
|
||||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Для них экранировать и нужно, почему - см. ответ skyboyя или PHP FAQ: \"Кавычки \". Cоставление запросов mysql, слеши, экранирование кавычек. Можно сказать и так ![]()
Действительно лучше, т.к. поведение magic_quotes зависит и от других настроек (подробнее в FAQ выше). -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
||||
|
|||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
SelenIT, стоп. Зачем на выходе что то делать вообще? Если записалось по нормальному. то и выведется по нормальному.
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
m1kle, смотря что и куда выводить. Если текст сомнительного происхождения (напр. запись в гостевой или форуме) выводится на HTML-странице, то нужно учесть, что злоумышленник мог вписать туда, например, яваскрипт, который ворует авторизационную куку юзера и отсылает на чужой сервер. Это называется XSS-уязвимость. Или просто навставлять левого HTML (напр. кучу закрывающих </td></table>) и поломать дизайн страницы. Чтобы подобный фокус не мог сработать, нужно как-то обработать текст перед выводом - проще всего с помощью htmlspecialchars.
Это сообщение отредактировал(а) SelenIT - 17.11.2007, 00:51 -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
на htmlspecialchars я проверяю
|
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
А mysql_real_escape_string() так же как и mysql_escape_string() следует использовать на входе, а не на выходе.
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
Конечно. Это ж по сути то же самое, только "более новое и надежное";)
А еще точнее - не "на входе", а при подстановке данных в SQL-запрос. -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Да, извиняюсь, неправильно выразился.. На выводе, конечно же, нужно применять htmlspecialchars(), а при запросе чего-либо в БД - mysql_real_escape_string(). ...предварительно очистив полученные данные функцией stripslashes(). (если включены магические кавычки) Это сообщение отредактировал(а) kasmanaft - 17.11.2007, 10:29 |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
и так ко всем входящим данным stripslashes применять? не проще ли отказаться от magic quotes, используя set_magic_quotes_runtime? |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
quotes_runtime и quotes_gpc разные вещи. gpc в момент исполнения уже не отключишь.
|
|||
|
||||
kasmanaft |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Так оно разве спасет? Я, честно говоря, до сих пор не понял чего делает эта функция.
|
||||
|
|||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
||||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
magic_quotes_gpc нельзя отключить в сценарии, так же, как и register_globals, так как их действие происходит до начала выполнения.
Для конкретной папки/сайта можно отключить в .htaccess если php стоит, как модуль. quotes_gpc экранирует входящие параметры из _GET, _POST, _COOKIE... runtime при получении из базы, файлов и т.п. Вот её отключить можно. |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Т.е. 100% защишенный скрипт это
|
|||
|
||||
kasmanaft |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 16.11.2007 Репутация: 1 Всего: 2 |
Только вот stripslashes() нужно применять при включенных магических кавычках, а в htmlspecialchars() желательно передавать второй параметр "ENT_QUOTES"
Т.е.
Это сообщение отредактировал(а) kasmanaft - 17.11.2007, 14:57 |
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
m1kle, не 100%-ый. См. первую часть ответа kasmanaftа и - обязательно - PHP FAQ.
-------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
SelenIT, а у kasmanaftа 100%й?
|
|||
|
||||
SelenIT |
|
|||
![]() баг форума ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3996 Регистрация: 17.10.2006 Где: Pale Blue Dot Репутация: 32 Всего: 401 |
95%-ный
![]() -------------------- Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму! |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
100%-защищенный скрипт это скрипт написанный программистом стопроцентно понимающим что он делает. Вы не понимаете. Вы выводите данные, пропущенные через mysql_escape_string на экран. Разберитесь в каких случаях, какие проблемы возникают и какие есть способы их решения, а не валите всё в кучу. |
|||
|
||||
m1kle |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 2.5.2007 Где: Москва, Россия Репутация: нет Всего: нет |
Так? |
|||
|
||||
vasac |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 8 Всего: 36 |
Уже лучше
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |