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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> данные пользователя вставляются в базу, как обезопаситься от разных пакостей? 
V
    Опции темы
underW
Дата 12.7.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



допустим, есть url такого вида:

Код

site.ru?q=1


по значению $_GET[q]  происходит выборка с базы

Код

SELECT * FROM table WHERE q= $_GET[q] 


Вопрос: как правильно обработать переменную $_GET[q], что бы избежать разных неприятностей, в случае передачи в q каких то "левых" значений?

и второй вопрос, как правильно обработать $_GET[q], если его значение будет записываться в базу:

Код

INSERT INTO table VALUES($_GET[q], NULL, NULL)

PM MAIL   Вверх
skyboy
Дата 12.7.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



насчет вставки данных в SQL запрос.
Если у тебя используется низкоуровнеый доступ(при помощи функций mysql_*), то для экранирования надо использовать mysql_real_escape_string.
Если у тебя используется библиотека-прослойка-абстракция(навроде PDO или adodb_lite), то обычно существуют механизмы параметризации запросов:
Код

$adodb_lite_connection->Execute('INSER INTO something(field1, field2) VALUES(?,?)', array('12314fff', '789'));

в этом случае экранирование реализуется библиотекой.
насчет хранения данных. любые данные, будучи записанными в БД, хранятся там без проблем. Вопрос в другом: как ты собираешься потом использовать эти данные? Если эти данные представляют собой HTML-разметку из относительно доверенного источника(например, администратор сайта вбил новый шаблон, который надо вывести как HTML) - то просто выводишь. Если эти данные выводятся разным пользователям и получены из недостаточно доверенного источника(комментарий к новости от одного из пользователей сайта), то лучше экранировать HTML-код при помощи htmlspecialchars или обрабатывать при помощи strip_tags. В противном случае, один пользователь может испортить жизнь другим пользователям разными способами: вставляя в HTML-код своего сообщения ссылки на левые вредоносные javascript, перенаправления на другие сайты и т.д. А твоему сайту от этого ничего не будет. Это немного разные угрозы.
PM MAIL   Вверх
Ипатьев
Дата 12.7.2009, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Добавлю, что для конкретного приведенного здесь случая mysql_real_escape_string не решит проблему. Если мы обрабатываем данные этой функцией, то их еще надо обрамлять в запросе кавычками. Иначе ее использование не принесет пользы. 
Надо, чтобы в итоге получилось
Код

SELECT * FROM table WHERE q='1';


При использовании параметризации об этом думать не надо. 

Цитата(underW @  12.7.2009,  13:21 Найти цитируемый пост)
и второй вопрос, как правильно обработать $_GET[q], если его значение будет записываться в базу:

ответ: точно так же. правила подстановки данных в запросы совершенно одинаковы и не зависят от типа запроса.
PM MAIL   Вверх
underW
Дата 12.7.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ребят, спасибо, на основе ваших подсказок давай рыться и нашел вот это: тут рассмотрено все, что связано с правильным составлением  запросов к БД.
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.0897 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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