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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> защита от ключевых слов MySQL 
:(
    Опции темы
begin
Дата 27.7.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хочу реализовать на сайте функцию поиска, но тут натолкнулся в статьях об инъекциях на тот факт, что такие слова как UNION, OR, SELECT (ну и наверное все остальные ключевые слова MySQL) могут использоваться для инъекции.
Но я хочу, чтобы поиск искал и по русским и по анлийским словам. Как мне вычищать из запрашиваемой строки все ключевые слова?
PM MAIL   Вверх
Fally
Дата 27.7.2007, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Для инъекции используются не ключевые слова SQL, а операторы. При подстановке данных в запрос используй функцию РНР mysql_real_escape_string и никаких проблем не будет ;)

Это сообщение отредактировал(а) Fally - 27.7.2007, 15:27


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
begin
Дата 27.7.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот что нашел в описании этой ф-и:
Код

Кодируются следующие символы:
 NUL (ASCII 0), `\n', `\r', `\', `'', `"' и Ctrl-Z


А как же OR и ему подобные?
О них ни слова ни в одном описании..
PM MAIL   Вверх
Anarki
Дата 27.7.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вручную через str_replace тот же.
Интересная статейка:
http://www.securitylab.ru/analytics/216344.php


Fally
Как бы не так

Например, мы пользователь с uid=5, хотим получить информацию доступную для пользователя с uid=3
Код

$uid = 5;
$id = '1000 --'; // это может браться из $_REQUEST
$q = 'SELECT * FROM `information` WHERE id='.mysql_real_escape_string($id).' AND uid=3';
$r = mysql_query($q) or die(mysql_error());
echo '<pre>';
print_r(mysql_fetch_assoc($r));
echo '</pre>';

И мы ее получим.

Это сообщение отредактировал(а) Anarki - 28.7.2007, 00:11


--------------------
PM WWW   Вверх
sTa1kEr
Дата 28.7.2007, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


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

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



Цитата(Anarki @  27.7.2007,  23:56 Найти цитируемый пост)
Как бы не так

Пока эта строка находится в кавычках - это константа и никакие "--" не будут считаться комментариям, а если лень обрамить числовую переменную кавычками, то используйте intval(). Т.ч. Fally абсолютно прав.

Если хотите еще большей защиты, то используйте Prepared Statements.


PM MAIL   Вверх
Anarki
Дата 28.7.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну я лишь привел пример, который придумал, естественно в нормальных скриптах всё лучше делать через placeholders те же. Но в я думаю будут встречатся и такой код в скриптах , не все же заключают в кавычки или делают приведение к integer'у.

Это сообщение отредактировал(а) Anarki - 29.7.2007, 14:55


--------------------
PM WWW   Вверх
Fally
Дата 30.7.2007, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Anarki, ну-ну..., по-моему, любые данные пришедшие в скрипт от пользователя, имеют строковое представление (или я не прав?).. а следовательно что мешает мне применить к ним mysql_real_escape_string() ? А к заведомо целочисленным переменным использовать, как сказал sTa1kEr, intval() или же (int)$var? 
А насчёт плейсхолдеров я с вами согласен, но видел людей, в классе с возможностью их использовать, всё равно применяли обычные запросы как и mysql_query(). Кстати, Дмитрий Котеров предлагает очень хорошую библиотеку DbSimple
begin,  Этого достаточно, к SQL-injection в первую очередь приводят не операторы языка SQL, а злонамеренное использование в данных идущих в запрос символов, таких как приведены в описании функции...

Это сообщение отредактировал(а) Fally - 30.7.2007, 09:44


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Anarki
Дата 31.7.2007, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Fally @  30.7.2007,  12:40 Найти цитируемый пост)
Anarki, ну-ну..., по-моему, любые данные пришедшие в скрипт от пользователя, имеют строковое представление (или я не прав?).. а следовательно что мешает мне применить к ним mysql_real_escape_string()

Да, конечно, в виде строк. Ничего не мешает, главное не забывать обрамлять апострофами или кавычками эти параметры в SQL-строке, как уже сказали.

Кстати DbSimple автоматом обрамляет подставляемые значения апострофами, формируя запрос  smile 
И вообще пользуюсь ей очень давно и доволен  smile 


Это сообщение отредактировал(а) Anarki - 31.7.2007, 00:01


--------------------
PM WWW   Вверх
Fally
Дата 31.7.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сам пользуюсь, жалоб не было))) А уж НЕобрамление апострофами или кавычками зависит от коэффициента криворукости и склероза программиста))


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




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


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

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