![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: нет Всего: 64 |
Всем привет!
Объясните плиз. Насколько мне известно, текстовые данные приходят из формы в экранированном виде (со слешами). Так же мускул требует, чтобы текстовые данные перед добавлением были экранированы. Это так? Как правильно обработать данные пришедшие с формы и записать их в БД. Я делаю так:
И уже $str записываю в БД. Вроде всё работает... -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| unicross |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 422 Регистрация: 15.6.2008 Репутация: 5 Всего: 53 |
mysql_real_escape_string()
А магические кавычки лучше отлючить вообще... |
|||
|
||||
| bars80080 |
|
||||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
только в случае, если стоят такие настройки сервера проверяется просто:
самый простой способ придумали разработчики:
не правильный вариант. htmlspecialchars к БД отношения не имеет никакого, это функция используется для вывода хтмл-содержимого в браузер. если в настройках сервера включено автоматическое экранирование, то надо применять stripslashes, а затем mysql_real_escape_string |
||||||||
|
|||||||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
Добавлю, что неправильна сама постановка вопроса.
Во-первых, не текстовые должны быть заэкранированы, а любые. Во-вторых, источник тоже не имеет значения - что POST, что GET, что файл, что руками в скрипте вбито - без разницы, правила одни и те же. |
|||
|
||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: нет Всего: 64 |
unicross, спасибо.
Ясно. mysql_real_escape_string - это какая-то смесь addslashes и addcslashes... Я знаю, что не имеет. Но мне потом эти данные нужно выводить на страницу. Я применяю эту функцию, чтобы никто не нагадил (JS). Разумнее же один раз применить её перед добавлением данных в БД, чем потом каждый раз при извлечении. ;) А какой смысл экранировать INT, BOOL, FLOAT и т.д.?
Это я тоже знаю. Просто количество символов в описании темы ограничено. И я выбрал $_POST -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| bars80080 |
|
||||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
смесь не смесь - не важно. важно то, что она делает именно то что нужно и больше думать не надо
и какая связь между БД и тем что потом надо вывести? вот потом при выводе и применишь.
совершенно не разумно. как ты будешь редактировать уже отформатированные данные? не имеет, но только в том случае, если у тебя есть эта проверка на int, bool и прочее |
||||||
|
|||||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: нет Всего: 64 |
Лучше один раз обработать данные и записать их, чем потом каждый раз при считывании их обрабатывать. Во втором случае больше времени и ресурсов тратится. Зачем? Если на то пошло, то ничего сложного в редактировании <, и т.д. нет.
Зачем проверка? Если я знаю какие типы у полей таблицы, зачем мне все значения обрабатывать mysql_real_escape_string? Я буду обрабатывать только текстовые поля. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
хе-хе. то есть, не значения, идущие не в текстовые поля, обрабатывать никак не будете?
Это сообщение отредактировал(а) Ипатьев - 24.8.2009, 11:43 |
|||
|
||||
| Photon |
|
|||
|
Злобный программер ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 27.2.2009 Где: Таганрог Репутация: 1 Всего: 12 |
artsb, вот смотри.. У тебя есть в базе поле типа INT, ты в него записываешь то, что у тебя пришло из формы:
mysql_query("insert into `table` (`TMP_ID`) VALUES({$_POST['tmp_id']})"); И тут выясняется, что в $_POST['tmp_id'] записано что-то вроде 1; use `mysql`; select * from `mysql` или еще что-то подобное.. И как? Нормально? А вот если бы было вот так:
то никаких проблем бы не возникло.. -------------------- With best regards.. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
Вообще, этот вопрос спорный - форматировать и чистить данные для вывода на странице перед записью в бд или нет. Я предпочитаю записывать в неизменном виде и производить необходимые действия при выводе. При редактировании давая пользователю возможность исправить данные в том виде, в каком он их ввел. И не стоит сильно заботиться о производительности - это сотые доли %. Добавлено через 46 секунд Photon, зачем тему палишь? -------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: нет Всего: 64 |
Ипатьев, Photon, я проверяю все значения. Просто речь идёт о текстовых данных, поэтому ни о чём доугом я не упоминал.
IZ@TOP, спасибо. Прислушаюсь к вашему совету. Добавлено через 4 минуты и 36 секунд Photon, произошла бы ошибка:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
artsb, в любом случае, надо учесть две вещи, о которых говорил Photon:
1. Всегда экранировать пользовательские данные. 2. Использовать для этого те методы, которые для этого предназначены. Для текстовых данных используйте mysql_real_escape_string, для чисел int/float приведение к типу:
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
artsb, это специальный такой пример. Нерабочий, но наглядный. Можете мне поверить, запрос вполне можно составить прекрасно исполняемый, с подобным функционалом.
IZ@TOP, я настаиваю на неверности этой формулировки. Не пользовательские данные, а любые данные, помещаемые в запрос, как строки. Правильной будет формулировка "любые данные, помещаемые в запрос, как строки, обрабатываются функцией искейпинга и обрамляются кавычками". А то вон в соседней теме товарищ искейпинг сделал, а кавычки забыл. и толку с той "правильной" обработки - как с козла молока |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: нет Всего: 64 |
Полностью согласен. Я так изначально и думал. Ещё раз всем спасибо ;) -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 4 Всего: 73 |
Ипатьев, ну давайте переформулируем с поправкой - экранировать любые данные (или просто - всегда). Обозначение "пользовательские", лишь расхожее выражение.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |