SQL-инъекция в OdbcCommand.Parameters на PostgreSQL? - PullRequest
0 голосов
/ 21 ноября 2011

Предположим, что у вас есть этот код в C # /. NET (используя PostgreSQL через ODBC):

using System.Data.Odbc;
...
OdbcCommand cmd = ...;
cmd.CommandText = "SELECT id, email, password FROM users WHERE email=?;";
cmd.Parameters.Clear();
cmd.Parameters.Add("email", OdbcType.VarChar).Value = aEmail;

Но когда aEmail == \ '(обратная косая черта и апост.), Тогда он выдает мне следующую ошибку:

Exception type: OdbcException 
Exception message: ERROR [42601] ERROR: unterminated quoted string at or near "'\''';";
Error while executing the query

Как я уже читал, использование OdbcCommand.Parameters должно защищать от SQL-инъекций, но в этом случае похоже, что что-то работает не так, чего мне не хватает?Важное примечание: я никогда раньше не использовал PostgreSQL, ODBC, .NET (начался сегодня, но я надеюсь завершить его и сегодня;), но мне нужно исправить 4 SQL-запроса в одном простом веб-приложении - ранее было:

System.Format("SELECT ... email = {0}", aEmail)

1 Ответ

1 голос
/ 21 ноября 2011

Вы пытаетесь избежать одиночной кавычки?проблема в том, что для экранирования одинарной кавычки в PostgreSQL вы должны экранировать ее с другой одинарной кавычкой, а не с обратной косой чертой:

''''

Однако драйвер ODBC должен сделать это для вас, автоматически передавая только одну кавычку ..Попробуйте обновить до последней версии драйвера ODBC, если проблема не устранена, может быть, лучше открыть проблему в списке рассылки об ошибке postgreSQL .

...