Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Изменение запросов через пользовательскую функцию

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
DeUM
Отправлено: 18 Мая, 2013 - 11:20:54
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Недавно мне порекомендовали использовать mysql_real_escape_string(), но она губит сам запрос
Из этого:
CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT * FROM `table` WHERE `login` = 'admin'"

Она превращает в это:
CODE (SQL):
скопировать код в буфер обмена
  1. "SELECT * FROM `table` WHERE `login` = \'admin\'"

Делая запрос невозможным.
У меня имеется функция:
PHP:
скопировать код в буфер обмена
  1. function query__ ($que) {
  2.         $res = @mysql_query($que);
  3.         if (!$res) {
  4.                 echo mysql_error().'<br>';
  5.                 return false;
  6.         }
  7.         else
  8.                 return $res;
  9. }

Как реализовать защиту при помощи mysql_real_escape_string() и vsprintf() ?
 
 Top
Морозов Семен
Отправлено: 18 Мая, 2013 - 11:38:50
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Я использую эту функцию для защиты форм ввода в связке с другими
PHP:
скопировать код в буфер обмена
  1. function sanitizeString($var)
  2. {
  3.         $var = htmlspecialchars($var);
  4.         $var = strip_tags($var);
  5.         $var = htmlentities($var, ENT_QUOTES, "utf-8");
  6.         $var = stripslashes($var);
  7.         $var = mysql_real_escape_string($var);
  8.         return $var;
  9. }


Пример использования:
PHP:
скопировать код в буфер обмена
  1. if (isset($_GET['words']))
  2.                 {$search_words = sanitizeString($_GET['words']);}

(Добавление)
DeUM пишет:
Из этого:
CODE (SQL):
скопировать код в буфер обмена

"SELECT * FROM `table` WHERE `login` = 'admin'"


Она превращает в это:
CODE (SQL):
скопировать код в буфер обмена

"SELECT * FROM `table` WHERE `login` = \'admin\'"


Делая запрос невозможным.

При использовании mysql_real_escape_string() никогда такого не наблюдал.
 
 Top
esterio
Отправлено: 18 Мая, 2013 - 13:52:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Морозов Семен
Извините но ето плохая функция. данные в бд должны быть такие как на входе. Почему? Ваша функция мне затреть разметку с wysiwyg-редактора. А ето уже не хорошо. Там достаточно mysql_real_escape_string
 
 Top
LIME
Отправлено: 18 Мая, 2013 - 13:57:49
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




да что там...она просто откровенно глупая
PHP:
скопировать код в буфер обмена
  1. $que = 'SELECT * FROM `table` WHERE `login` = "'.mysql_real_escape_string($login).'"';
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Мая, 2013 - 14:12:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




esterio пишет:
затреть разметку с wysiwyg-редактора

Вот этот не затирает, но правда и не эскейпит.
Эскейпит пусть тот, кто в базу пишет.
 
 Top
Морозов Семен
Отправлено: 18 Мая, 2013 - 14:24:43
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




esterio, LIME в смысле глупая?
 
 Top
LIME
Отправлено: 18 Мая, 2013 - 14:37:22
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




PHP:
скопировать код в буфер обмена
  1. function sanitizeString($var)
  2. {
  3.         $var = htmlspecialchars($var);//меняем все <> итд на мнемоники &lg $gt итд
  4.         $var = strip_tags($var);//вырезаем теги хотя непонятно откуда они возьмутся раз мы их уже заменили
  5.         $var = htmlentities($var, ENT_QUOTES, "utf-8");//все что осталось меняем к хренам на html-сущности!...включая мнемоники полученые в 1ой замене...УРААА!!! вперед  до победного!!!
  6.         $var = stripslashes($var);//хз откуда в этой каше возьмутся слэши(если были  то они уже давно стали html-сущностями) но меняем и их...они хитрые и коварные...могли пролезть
  7.         $var = mysql_real_escape_string($var);//есть кто еще живой после бомбежки?...выходи из сумрака!
  8.         return $var;//еле живое непонятно что куда-то возвращается...интересно есть ф-ция для реанимации етого всего?

}
 
 Top
DeepVarvar Супермодератор
Отправлено: 18 Мая, 2013 - 14:39:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Ха-ха Ха-ха Ха-ха Ха-ха Ха-ха
 
 Top
DeUM
Отправлено: 18 Мая, 2013 - 16:52:49
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




LIME, DeepVarvar как её в в функцию влепить вы всё смеётесь, но так и не понятно как это внедрить?
Может есть какой-нибудь способ вытаскивать

(Отредактировано автором: 18 Мая, 2013 - 16:53:38)

 
 Top
Мелкий Супермодератор
Отправлено: 18 Мая, 2013 - 17:21:21
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeUM, скажите, какой запрос правильный?
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `table` WHERE `login` = 'admin or 1'
  2. SELECT * FROM `table` WHERE `login` = 'admin' OR 1

А как функция понимать должна, где запрос, а где - аргумент? Оба запроса полностью корректны.

mysql_real_escape_string должен применяться к данным, а не к запросу. Чтобы запрос не был изменён данными.
PHP:
скопировать код в буфер обмена
  1. "SELECT * FROM `table` WHERE `login` = '".mysql_real_escape_string($login)."'"


Ну а нормальные люди используют mysqli или PDO и препарированные запросы.


-----
PostgreSQL DBA
 
 Top
esterio
Отправлено: 18 Мая, 2013 - 17:49:14
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




LIME
Радость Радость Радость
 
 Top
DeUM
Отправлено: 18 Мая, 2013 - 18:29:15
Post Id


Новичок


Покинул форум
Сообщений всего: 52
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Мелкий, задача заключается в том чтобы не дописывать при каждом обращении в БД
mysql_real_escape_string() а делать это через функцию
Мелкий пишет:
А как функция понимать должна, где запрос, а где - аргумент? Оба запроса полностью корректны.

Вот я и думал что можно как-нибудь разделить запрос и обрабатывать, что-то типа:
PHP:
скопировать код в буфер обмена
  1.  
  2. function query__($qwe) {
  3. $qwe = preg_replace('|\=\'(.*?)\'|ixs', "='".mysql_real_escape_string('$1')."'",$qwe);
  4. $res = mysql_query($qwe);
  5. ...
  6. }
  7.  
 
 Top
Морозов Семен
Отправлено: 18 Мая, 2013 - 18:41:15
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




LIME пишет:
го?
Радость Радость Радость Радость
Зато какая безопасность, это ж ни один скрипт не пролезет))))))
Текст самое главное пролазит, а он то нам как раз и нужен)))
(Добавление)
LIME пишет:
PHP:
скопировать код в буфер обмена
  1. function sanitizeString($var)
  2. {
  3.         $var = htmlspecialchars($var);//меняем все <> итд на мнемоники &lg $gt итд
  4.         $var = strip_tags($var);//вырезаем теги хотя непонятно откуда они возьмутся раз мы их уже заменили
  5.         $var = htmlentities($var, ENT_QUOTES, "utf-8");//все что осталось меняем к хренам на html-сущности!...включая мнемоники полученые в 1ой замене...УРААА!!! вперед  до победного!!!
  6.         $var = stripslashes($var);//хз откуда в этой каше возьмутся слэши(если были  то они уже давно стали html-сущностями) но меняем и их...они хитрые и коварные...могли пролезть
  7.         $var = mysql_real_escape_string($var);//есть кто еще живой после бомбежки?...выходи из сумрака!
  8.         return $var;//еле живое непонятно что куда-то возвращается...интересно есть ф-ция для реанимации етого всего?

}


Радость Радость Радость Радость
Зато какая безопасность, это ж ни один скрипт не пролезет))))))
Текст самое главное пролазит, а он то нам как раз и нужен)))
 
 Top
LIME
Отправлено: 18 Мая, 2013 - 18:43:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




а ты его посмотри в исходниках браузера
волосы на голове зашевелятся
(Добавление)
а как туда пролезет такой текст?
<><><>
я знаю а ты?
 
 Top
Морозов Семен
Отправлено: 18 Мая, 2013 - 18:48:02
Post Id



Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




LIME пишет:
а ты его посмотри в исходниках браузера
волосы на голове зашевелятся

Там всё нормально, а что там должно быть?
(Добавление)
LIME пишет:
а ты его посмотри в исходниках браузера
волосы на голове зашевелятся
(Добавление)
а как туда пролезет такой текст?
<><><>
я знаю а ты?


ты имеешь ввиду в базу? так для этого случая есть BB-код например [p] заменяешь на <p>
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB