LINUX.ORG.RU

История изменений

Исправление ChALkeR, (текущая версия) :

Больше того, вместо prepared statements он использует построение запроса экранированием и конкатенацией, но внутри себя.

Причём довольно внезапным для некоторых образом:

"SELECT * FROM user WHERE user = ? AND ?", ['a', {'foo.bar.baz': 1}]
становится
SELECT * FROM user WHERE user = 'a' AND `foo`.`bar`.`baz` = 1
а
"SELECT * FROM user WHERE user = ?", [{a: 1, b: 2}]
становится
SELECT * FROM user WHERE user = `a` = 1, `b` = 2
и валится дальше по понятным причинам.

Ну плюс ещё можно заоверрайдить toString и получить то, что с виду выглядит как SQLi (но это в реальности не встретится, так как если ты позволяешь пользователю писать код toString — у тебя гораздо большие проблемы, чем SQLi).

Но это один фиг несколько не то, что ожидаешь от того, что выглдяит как prepared statements. Зарепортил: https://github.com/mysqljs/sqlstring/issues/6

Исправление ChALkeR, :

Больше того, вместо prepared statements он использует построение запроса экранированием и конкатенацией, но внутри себя.

Причём довольно внезапным для некоторых образом:

"SELECT * FROM user WHERE user = ? AND ?", ['a', {'foo.bar.baz': 1}]
становится
SELECT * FROM user WHERE user = 'a' AND `foo`.`bar`.`baz` = 1
,
"SELECT * FROM user WHERE user = ?", [{a: 1, b: 2}]
становится
SELECT * FROM user WHERE user = `a` = 1, `b` = 2
и валится дальше по понятным причинам.

Ну плюс ещё можно заоверрайдить toString и получить то, что с виду выглядит как SQLi (но это в реальности не встретится, так как если ты позволяешь пользователю писать код toString — у тебя гораздо большие проблемы, чем SQLi).

Но это один фиг несколько не то, что ожидаешь от того, что выглдяит как prepared statements. Зарепортил: https://github.com/mysqljs/sqlstring/issues/6

Исходная версия ChALkeR, :

Больше того, вместо prepared statements он использует построение запроса экранированием и конкатенацией, но внутри себя.

Причём довольно внезапным для некоторых образом:

"SELECT * FROM user WHERE ?", [{a: 1, b: 2}]
становится
"SELECT * FROM user WHERE `a` = 1, `b` = 2"
,
"SELECT * FROM user WHERE user = ? AND ?", ['a', {'foo.bar.baz': 1}]
становится
"SELECT * FROM user WHERE user = \'a\' AND `foo`.`bar`.`baz` = 1"
,
"SELECT * FROM user WHERE user = ?", [{a: 1, b: 2}]
становится
"SELECT * FROM user WHERE user = `a` = 1, `b` = 2"
и валится дальше по понятным причинам.

Ну плюс ещё можно заоверрайдить toString и получить то, что с виду выглядит как SQLi (но это в реальности не встретится, так как если ты позволяешь пользователю писать код toString — у тебя гораздо большие проблемы, чем SQLi).

Но это один фиг несколько не то, что ожидаешь от того, что выглдяит как prepared statements.

Зарепортил: https://github.com/mysqljs/sqlstring/issues/6