|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
Бывает, что нужно отдавать пользователю результаты SQL запроса в формате JSON. Такая функциональность в Caché есть уже давно - jsonSQLProvider , но входной параметр там - строка, содержащая SQL выражение. И, к сожалению, есть пользователи, которые любят в запрос "SELECT Name, Surname, ID from Sample.Users WHERE ID ="_ID подставить что-то вроде 1; SELECT * from Sample.Users. Лучшая защита от SQL-иньекций в Caché - параметризованные запросы : "SELECT Name, Surname, ID from Sample.Users WHERE ID = ?". Однако, раньше преобразования результата подобного SQL-запроса в JSON не было. Теперь это возможно с помощью https://github.com/intersystems-ru/jsonDynamicSQLProvider Пример использования: do ##class(%ZEN.Auxiliary.jsonDynamicSQLProvider).%WriteJSONFromDynamicSQL(,"SELECT Name,Surname,ID from Sample.Users WHERE ID = ?",$LB("60")) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 21:53 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
eduard93Такая функциональность в Caché есть уже давно - jsonSQLProvider , но входной параметр там - строка, содержащая SQL выражение. jsonSQLProvider вполне поддерживает параметризованные запросы: 14637070 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 23:25 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
servit, Я имел в виду вне zen. В таком случае используется метод ##class(%ZEN.Auxiliary.jsonProvider).%WriteJSONFromSQL() который не поддерживает параметризованные запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 11:01 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
В указанном посте упоминался патч (будет встроен в 2014.2), который исправляет встроенный класс %ZEN.Auxiliary.jsonSQLProvider для правильной поддержки параметризованных запросов, включая, конечно, и методы %WriteJSONXXX. Но нет проблем самостоятельно исправить %ZEN.Auxiliary.jsonSQLProvider для текущих версий.Результат вызова: #define NULL "" #define EMPTYSTR $c(0) set parms(1)="test" set parms(2)=$lb($$$EMPTYSTR,$$$NULL,"a",77) do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"select ? as f1,$listtostring(?) as f2",.parms) Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 11:46 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
servit, Не знал. Class Test.jsonSQLProvider Extends %RegisteredObject { ClassMethod json0() { // do ##class(Test.jsonSQLProvider).json0() #define NULL $c(0) set parms(1)="test" set parms(2)=$lb($$$NULL,"","a",77) do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"select ? as f1,$listtostring(?) as f2",.parms) } ClassMethod json1() { // do ##class(Test.jsonSQLProvider).json1() set parms(1)="20000" do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"SELECT * FROM Cinema.Film Where TicketsSold>?",.parms) do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,"SELECT * FROM Cinema.Film Where TicketsSold>"_parms(1)) } } А не подскажете, пожалуйста, почему у меня метод json1() не работает (в первом случае ничего не выдает), импорт в область SAMPLES? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 12:44 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
eduard93А не подскажете, пожалуйста, почему у меня метод json1() не работает?У Вас есть патч? Вы его применили? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 13:02 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
serviteduard93А не подскажете, пожалуйста, почему у меня метод json1() не работает?У Вас есть патч? Вы его применили? Использовал версию 2014.2 build 177. Думал, что там это уже есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2014, 13:17 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
похоже что в 2014.2 не добавили этот патч на саммите версия $zv Cache for Windows (x86-64) 2014.2 (Build 210 Experimental) Wed Feb 26 2014 00:12:45 EST и тут параметризованные запросы не работают Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2014, 21:59 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
DAiMor , Сезон FieldTest ещё не открыт, поэтому рано об этом говорить. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2014, 11:34 |
|
SQL в JSON без SQL-инъекций
|
|||
---|---|---|---|
#18+
Сезон 2014.2 Field Test уже открыт. Класс %ZEN.Auxiliary.jsonSQLProvider обновлён. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2014, 18:07 |
|
|
start [/forum/topic.php?fid=39&fpage=19&tid=1556839]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
14ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 334ms |
total: | 483ms |
0 / 0 |