Синтаксическая ошибка в инструкции INSERT INTO с ASP.NET - PullRequest
0 голосов
/ 06 декабря 2011

Вот запрос:

INSERT INTO `users` (username, password, email) VALUES ('testu', 'testp', 'teste')

Я получаю эту ошибку со следующим кодом VB (ASP):

    username = Request.Form("username")
    password = Request.Form("password")
    email = Request.Form("email")

    Dim conn As OleDbConnection = New OleDbConnection(GetConnectionString())
    Dim comm As OleDbCommand = New OleDbCommand("INSERT INTO users (username, password, email) VALUES ('" & username & "', '" & password & "', '" & email & "')", conn)

    conn.Open()
    comm.ExecuteNonQuery()

Что не так с этим утверждением?Я знаю, что строка подключения верна, потому что я использовал ее в остальной части моего приложения.

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Согласен! Всегда используйте параметр (подготовленный) запрос и хешируйте ваш пароль. Прочитайте ТАКУЮ ветку - Соление вашего пароля: лучшие практики? .

 Dim conn As OleDbConnection = New OleDbConnection(GetConnectionString())
 Dim comm As OleDbCommand = New OleDbCommand("INSERT INTO users (username, [password], email) VALUES (@username,@password,@email)",conn)
 comm.Parameters.Add("@username",OleDbType.Varchar,30).Value=username
 ....
1 голос
/ 06 декабря 2011

НИКОГДА не передавайте параметры командам SQL с конкатенацией! Это открытый способ атаки SQL-инъекцией.

Вы должны использовать заполнители для параметров и добавлять фактические значения, используя comm.AddParameter ().

Что касается вашей ошибки - я ожидаю, что некоторые значения ваших параметров содержат одинарные кавычки (').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...