2013-05-29 3 views
4

Я разрабатываю настольное приложение Java, которое соединяется с базой данных, и я хотел бы знать следующее. Это приводит к тому, что, насколько мне известно, подготовленные утверждения избегают инъекций SQL, в то время как вы не делаете прямую конкатенацию с пользовательскими данными, но сегодня я понял, что он не избегает регулярного выражения String (например, «%» от оператора LIKE,) из-за того, что он просто ускользает от символов, которые могут разбить сам String и изменить запрос. Таким образом, если пользователь:Mysql, работающий с String Regex

Search = "%Dogs"; // User input 
Query = "SELECT * FROM Table WHERE Field LIKE ?"; 
blah.setString(1, Search); 

Он будет возвращать все строки, содержащие «Собаки» в начале с помощью инъекции.

Теперь я спрашиваю:

1) Является ли это что-то плохое/опасно просмотр с глобальной точки?

2) Есть ли полный список регулярных выражений, которые Mysql может использовать изнутри строки? если да, можете ли вы поделиться им со мной?

спасибо.

+0

Это не регулярное выражение, это LIKE.maybe вы имели в виду RLIKE – Bohemian

+0

возможный дубликат [Поиск с использованием MySQL: как избежать подстановочных знаков] (http://stackoverflow.com/questions/4588424/searching-using-mysql-how-to -escape-подстановочные знаки) –

+0

@Bohemian документация для 'LIKE' говорит« сопоставление шаблонов с использованием простого сравнения регулярных выражений SQL ». –

ответ

2

Если пользователь использует такие метасимволы в своем поиске, результаты могут быть или не быть катастрофическими, но поиск %% может быть плохим. Правильный поиск %Dogs также не может вернуть результаты, ожидаемые пользователем, что влияет на их опыт.

LIKE предлагает только два метасимвола, поэтому вы можете сбежать от них самостоятельно, когда их приобрели у пользователей (просто используя что-то похожее на Search = Search.replaceAll("%", "\\\\%")).

+0

Согласен, еще одна вещь, кроме LIKE, есть ли другой оператор/функция/etc, который оценивает такие выражения? – Neo

+0

@Neo не так, но есть 'RLIKE' –