有人可以告诉我这个陈述有什么问题吗?

时间:2010-07-30 10:39:30

标签: sql asp-classic vbscript

我正在使用它在我的表中插入一些东西,它不断给我这个错误:

Microsoft VBScript compilation error '800a03ee'
Expected ')'
/thanks.asp, line 63

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

这是我正在使用的代码:

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

有人可以帮帮我吗?

谢谢

4 个答案:

答案 0 :(得分:3)

我建议按如下方式分解你的代码,这样它就变得易读和可理解了:

Dim execSql
execSql = "insert into SALT (Email, Username, FirstName, LastName, ActivationCode)"
execSql = execSql & " VALUES ('"
execSql = execSql & Request.QueryString("payer_email") 
execSql = execSql & "', '" 
execSql = execSql & Request.QueryString("payer_email") 
execSql = execSql & "', '" 
execSql = execSql & Request.QueryString("first_name") 
execSql = execSql & "', '" 
execSql = execSql & Request.QueryString("last_name") 
execSql = execSql & "', '" 
execSql = execSql & Request.QueryString("hash")
execSql = execSql & "')"

Set rstSimple = cnnSimple.Execute(execSql)
输入时,我删除了你的字符串的引用错误。现在,如果收到新错误,它们会变得更加明显。此外,代码的着色使其可读且易于发现错误(取决于您使用的编辑器)。


编辑SQL注入和安全性

正如其他人已经提到的,您的代码非常容易受到SQL注入攻击。即使没有攻击(即丢弃数据库),如果有人被命名为d'Amour(法语)或in 't Huys(荷兰语),它将会失败,从而导致页面崩溃。要避免这种情况,请不要尝试过滤代码,而是使用SQL命令和参数重写代码。这很简单,你的代码就变成了这个:

Set dbCommand = Server.CreateObject("ADODB.Command")
Set dbCommand.ActiveConnection = cnnSimple
dbCommand.CommandType = adCmdText
dbCommand.CommandText = _
    "INSERT INTO SALT (Email, Username, FirstName, LastName, ActivationCode) " + _ 
    "VALUES (@email, @user, @firstname, @lastname, @code)"
With dbCommand.Parameters
    .Add("email", adVarChar, adParamInput, , Request.QueryString("payer_email"))
    .Add("user", adVarChar, adParamInput, , Request.QueryString("payer_email"))
    .Add("firstname", adVarChar, adParamInput, , Request.QueryString("first_name"))
    .Add("lastname", adVarChar, adParamInput, , Request.QueryString("last_name"))
    .Add("code", adVarChar, adParamInput, , Request.QueryString("hash"))
End With

Set rstSimple = dbCommand.Execute()

注意:请务必download and include ADOVBS.INC,这样您就不必将常量adVarCharadParamInput替换为等效数字。

有关详细信息,请参阅this SO answer by Jose Basilio,Google上的“SQL注入ASP”或“SQL Prepared Statement Classic ASP”,它应该会找到一些点击。

答案 1 :(得分:0)

您在这里缺少&

VALUES ('"Request.QueryString("payer_email") & "'

应该是:

VALUES ('" & Request.QueryString("payer_email") & "'

即使在声明的最后部分,您仍然缺少&而丢失了"

Request.QueryString("hash")"'))

应该是:

Request.QueryString("hash") & "')")

因此,您可能需要尝试以下语句:

cnnSimple.Execute("insert into SALT (Email, Username, FirstName, LastName, ActivationCode) VALUES ('" & Request.QueryString("payer_email") & "', '" & Request.QueryString("payer_email") & "', '" & Request.QueryString("first_name") & "', '" & Request.QueryString("last_name") & "', '" & Request.QueryString("hash") & "')")

答案 2 :(得分:0)

似乎存在与括号相关的语法错误。 该行末尾的2个括号看起来很可疑。

答案 3 :(得分:0)

缺少的&符号和引号可能是您遇到的最少问题。

看起来你不是以任何方式清理琴弦。字符串可以包含未转义的单引号。您可以使用SQL注入,因为您没有使用参数。