История изменений
Исправление 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