Запрос SQL String - PullRequest
       29

Запрос SQL String

1 голос
/ 30 июля 2010

У меня есть этот запрос на вставку, который я пытаюсь сделать, но он не работает. независимо от того, сколько вариаций и вариаций я пробую, с моим кодом всегда возникают проблемы.

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (<%=Request.QueryString(payer_email)%>, <%=Request.QueryString(payer_email)%>, <%=Request.QueryString(first_name)%>, <%=Request.QueryString(last_name)%>, <%=Request.QueryString(hash)%>, <%=Request.QueryString(txn_id)%>, <%=Request.QueryString(client_id)%>)")

Я не понимаю, в чем его проблема: он продолжает говорить:

Microsoft VBScript compilation error '800a0409'

Unterminated string constant

/thanks.asp, line 62

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (<%=Request.QueryString(payer_email)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^

Примечание: VBScript & ASP.

Может кто-нибудь помочь мне разобраться? Спасибо.

Ответы [ 6 ]

1 голос
/ 30 июля 2010

Вам необходимо поместить кавычки вокруг ваших выражений <% = Request.QueryString (xyz)%> и имен ваших параметров, и поскольку вы находитесь в сценарии, вы не делаете <% =%>. например как показано ниже:

insert into ... VALUES ('" &  Request.QueryString("payer_email") & "', ...)

EDIT:

Вот полное утверждение:

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES ('" & Request.QueryString("payer_email") & "','" & Request.QueryString("payer_email") & "','" & Request.QueryString("first_name") & "','" & Request.QueryString("last_name") & "','" & Request.QueryString("hash") & "','" & Request.QueryString("txn_id") & "','" & Request.QueryString("client_id") & "')")

Это сопровождается обычными ОСТОРОЖНЫМИ предупреждениями о внедрении SQL.

0 голосов
/ 30 июля 2010

Есть несколько проблем с кодом:

  • Вы используете теги сервера (<%= %>) в коде сервера.
  • У вас нет кавычек вокруг имен ключей строки запроса.
  • У вас нет апострофов вокруг строковых значений в запросе.
  • Строковые значения не закодированы, поэтому запрос широко открыт для атак с использованием SQL-инъекций.

Вам нужна функция для кодирования строк, это работает для MS Access и MS SQL Server:

Function SqlEncode(str)
  SqlEncode = Replace(str, "'", "''")
End Function

Затем вы используете это для строковых значений в запросе:

Set rstSimple = cnnSimple.Execute( _
  "insert into SALT " & _
  "(Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES (" & _
  "'" & SqlEncode(Request.QueryString("payer_email")) & "', " & _
  "'" & SqlEncode(Request.QueryString("payer_email")) & "', " & _
  "'" & SqlEncode(Request.QueryString("first_name")) & "', " & _
  "'" & SqlEncode(Request.QueryString("last_name")) & "', " & _
  "'" & SqlEncode(Request.QueryString("hash")) & "', " & _
  "'" & SqlEncode(Request.QueryString("txn_id")) & "', " & _
  "'" & SqlEncode(Request.QueryString("client_id")) & "'" & _
  ")")
0 голосов
/ 30 июля 2010

Это не отвечает на ваш вопрос, но обратите внимание, что для строковых полей вам также нужно будет заключить в кавычки строки, например:

VALUES ('<%=Request.QueryString(payer_email)%>', 

Ваш код также очень подвержен атакам внедрения SQL - этопроблема, если ваша система подключена к Интернету.

0 голосов
/ 30 июля 2010

удалите <% %>, поскольку вы уже находитесь в режиме сценария ASP.это должно быть что-то вроде этого для ваших значений

'"& Request.QueryString("payer_email")&"', '"& Request.QueryString("first_name")&"', etc, etc
0 голосов
/ 30 июля 2010

Вместо того чтобы делать ...

"foo <%=bar%> foo"

... попробуйте это вместо:

"foo" & bar & "foo"
0 голосов
/ 30 июля 2010

Я думаю, что параметры, которые вы передаете Request.QueryString(), должны быть заключены в кавычки:

Request.QueryString("payer_email")

ОБНОВЛЕНИЕ: Да, и как @ PHPology предложила , вы должны удалить <% %> и просто использовать конкатенацию строк с &.

Попробуй так:

Set rstSimple = cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode, TransactionID, ClientID) VALUES ('" & Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash") & "', '" & Request.QueryString("txn_id") & "', '" & Request.QueryString("client_id") & "')")

Хотя ваш запрос и не связан с проблемой, он также уязвим для SQL-инъекции .

...