Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Безопасность входящих данных для LIKE (SQL)

4.9K
27 апреля 2009 года
Valar
81 / / 18.03.2008
Большая просьба к опытными программистам, прокомментируйте мою функцию для фильтрования переменных, участвующих в поисковых SQL-запросах (LIKE)

$full_search_mode и $clear_tags - два факультативных параметра. Первый заменяет * на % (для нестрого поиска), второй - над переменной выполняет функцию strip_tags.

Цитата:

function A_ProtectSqlSearchParam($sql_param, $full_search_mode="", $clear_tags="")
{
if ($clear_tags==true) $sql_param=strip_tags($sql_param);

$sql_param=str_replace('\\','\\\\', $sql_param);
$sql_param=addCslashes($sql_param, '_%');

if ($full_search_mode==true) $sql_param=eregi_replace("\*", '%', $sql_param);

$sql_param=mysql_real_escape_string($sql_param);

if (strlen($sql_param)>3 and strlen($sql_param)<100) return $sql_param;
else return false;
}

13
28 апреля 2009 года
RussianSpy
3.0K / / 04.07.2006
Прекрасный пример быдло-кода. Неэффективен, тяжело читается, нетривиальные "решения".

Зачем засовывать strip_tags внутрь функции? не проще ли использовать саму strip_tags там где это нужно? для чего нужна addCslashes????
mysql_real_escape_string тут вполне достаточно
менее быдлокодерский вариант выглядит так (хотя это тоже не образец для подражания):

 
Код:
function A_ProtectSqlSearchParam($sql_param, $full_search_mode=false, $clear_tags=false)
{
  if ($clear_tags) $sql_param = strip_tags($sql_param);

  if($full_search_mode) $sql_param = str_replace('*', '%', $sql_param);

  $sql_param = mysql_real_escape_string($sql_param);
 
  return $sql_param;
}


А зачем нужна была проверка вот эта
 
Код:
if (strlen($sql_param)>3 and strlen($sql_param)<100) return $sql_param;
else return false;


я вообще не понял - убрал ее.
5
28 апреля 2009 года
hardcase
4.5K / / 09.08.2005
А вообще зачем защищать LIKE ?
Или просто автор не знает о существовании параметризованных запросов?
4.9K
28 апреля 2009 года
Valar
81 / / 18.03.2008
RussianSpy, ваша функция нерабочая. Читаем из документации к php:
Цитата:

Поскольку в MySQL применяются правила экранирования в строках, применяемые в языке C (например, '\n'), необходимо дублировать все символы '\', используемые в строках функции LIKE.



Цитата:
mysql_real_escape_string тут вполне достаточно


Недостаточно. Поисковые запросы типа "%" не должны обрабатываться, т.к. при этом выводится содержимое всей таблицы. А экранизировать "%", "_" приходится вручную, если пользователю запрещается использовать литералы. Так что проверку длины строки вы зря в своей функции убрали))

Цитата:
Зачем засовывать strip_tags внутрь функции? не проще ли использовать саму strip_tags там где это нужно? для чего нужна


За тем же, зачем и нужны другие функции - чтобы меньше приходилось дублировать код.




hardcase, по-моему это вы не знаете про SQL-инъекции и литералы в поисковых запросах :D

13
28 апреля 2009 года
RussianSpy
3.0K / / 04.07.2006
 
Код:
по-моему это вы не знаете про SQL-инъекции и литералы в поисковых запросах


И это рассказывает человек который пишет в коде
 
Код:
if($full_search_mode==true)


Ну так вырезайте все невалидные символы. И вообще - вы запостили на форуме быдлокодерскую функцию и принимаете критику в штыки. Зачем вообще это например мне нужно? у меня таких умников 10 человек в отделе сидит.

Либо поясните подробнее, что вам нужно, либо я умываю руки и пишите свою [COLOR="Silver"]говно[/COLOR]функцию как хотите
4.9K
28 апреля 2009 года
Valar
81 / / 18.03.2008
Цитата:

И это рассказывает человек который пишет в коде
if($full_search_mode==true)


И что в этом такого? Для меня эта форма записи более читабильная. Вы уж не обижайтесь, но ваша критика ни о чем. Я прокомментировал все ваши замечания, потому что ни один из них, к сожалению, никаким боком не полезен. Вы мне ни раз помогали на этом форуме, но сейчас написали откровенный бред.

13
28 апреля 2009 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Valar
И что в этом такого? Для меня эта форма записи более читабильная. Вы уж не обижайтесь, но ваша критика ни о чем. Я прокомментировал все ваши замечания, потому что ни один из них, к сожалению, никаким боком не полезен. Вы мне ни раз помогали на этом форуме, но сейчас написали откровенный бред.



Вы не ответили на вопрос по поводу детального описания проблемы. Я так понимаю что тем самым вы говорите, что помощь вам больше не нужна?

4.9K
28 апреля 2009 года
Valar
81 / / 18.03.2008
Цитата: RussianSpy
Вы не ответили на вопрос по поводу детального описания проблемы. Я так понимаю что тем самым вы говорите, что помощь вам больше не нужна?



В принципе, я получил уже достаточно комментариев.
В частности, заменить устаревшную eregi_replace на str_replace, увеличить максимальную длину запроса до 255, передвинуть проверку на длину строки в начало (для оптимизации нагрузки), так что тему можно считать закрытой. Всем спасибо.

Единственное, так и не понял - сначала нужно делать дублирование слэшей или выполнять функцию mysql_real_escape_string...

13
28 апреля 2009 года
RussianSpy
3.0K / / 04.07.2006
В вашем случае это неважно - функция все равно останется убогой, код быдлокодом, решение анальным.

Ставьте хоть в начало хоть в конец - смысл не поменяется.

Я умываю руки. Удачи
4.9K
28 апреля 2009 года
Valar
81 / / 18.03.2008
Цитата:
функция все равно останется убогой, код быдлокодом, решение анальным.



Спасибо. Всегда ценил конструктивную критику.
У вас, видимо, какая-то личная обида на одну из функций, которую я использовал))

13
28 апреля 2009 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Valar
Спасибо. Всегда ценил конструктивную критику.
У вас, видимо, какая-то личная обида на одну из функций, которую я использовал))



Я уже все вам написал выше еще в первом сообщении. Если вы не читаете - это лично ваши проблемы.

Функция неверна в корне потому что решает проблему которой реально не существует. Но вы естественно старше, умнее и опытнее меня, поэтому вам виднее.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог