Как мога да дезинфекцирам параметрите на MySQL заявка в Esper

Използвам Esper 5.0 и трябва да изпълня заявка за данни от релационна база данни. Това в моя случай е MySQL база данни, свързана чрез JDBC. Сега бих искал да формулирам EPL заявка за данните от базата данни. Следователно моето запитване е подобно на това:

String parameter = "any"; // untrusted (!) parameter from some user input
String mySqlQuery = "SELECT `sth` FROM `mytable` WHERE `att` = " + parameter;
String query = "select sth from sql:myDB ['" + mySqlQuery + "']"

Сега как мога да дезинфекцирам ненадеждния параметър, който след това се изпраща до моята MySQL база данни? Документацията на Esper казва, че заявката основно се предава на софтуера на базата данни непроменена. Какво мога да направя? Хрумнах четири идеи:

  1. Използване на параметри за заместване на EPL: Не работи, защото не се поддържа от Esper в SQL изрази.
  2. Използване на EPL променливи: Трябва да е възможно да се дефинира променлива чрез нещо като epService.getEPAdministrator().getConfiguration().addVariable("parameter", String.class, parameter);, след което да се използва синтаксис "SELECT `sth` FROM `mytable` WHERE `att` = ${parameter}" за MySQL заявката. Esper трябва да замени променливата със съответната стойност. Не е хубаво да се дефинира глобална променлива за него, въпреки че човек може да го премахне отново с epService.getEPAdministrator().getConfiguration().removeVariable("parameter", true); след това. Но много по-важно: Това също не дезинфекцира ненадеждния параметър и не прави безопасното му предаване към базата данни, нали?
  3. Прочистване на параметрите от страна на Java: Заявките от страна на Java трябва да се извършват чрез PreparedStatement. Тъй като е технически невъзможно да се получи MySQL низ на заявка от PreparedStatement, това не е опция. Не мисля, че има друг безопасен начин за дезинфекция на параметър, предаден на база данни от страна на Java.
  4. Дефиниране на всички ограничения от страна на EPL: Човек може просто да направи SELECT * FROM `mytable` без да дефинира ограничения, за да избере всичко от базата данни на MySQL и след това да дефинира ограниченията чрез EPL и да използва EPPreparedStatement за него. Това ли е правилният път? Опасявам се, че това не е наистина ефективно, защото много записи се четат от базата данни MySQL, които не са необходими.

Някакви идеи?


person Simon    schedule 12.08.2014    source източник


Отговори (1)


Ще работи ли с API на операторския обектен модел? Този API ви дава пълен контрол върху всички части на EPL.

person user650839    schedule 13.08.2014
comment
Ами... не знам :-) Аз съм почти нов за Esper. Ако сте добавили пример, показващ как да го използвате с MySQL израз и как да дезинфекцирате параметрите с него, ще съм ви много благодарен. - person Simon; 13.08.2014
comment
Между другото, защо не създадете акаунт в Stackoverflow? :) Благодаря за цялата помощ тук с #esper - person Simon; 13.08.2014