【问题标题】:Using ASP and INSERT INTO -使用 ASP 和 INSERT INTO -
【发布时间】:2011-12-02 06:57:58
【问题描述】:

我正在尝试创建一个将数据输入数据库的简单页面,我的代码如下。

<%@ LANGUAGE="VBSCRIPT" %>
<% Option Explicit %>
<!--#include FILE=dbcano.inc-->
<%

dim username,password,f_name,l_name,objConn,objs,query

username   = Request.Form("user")
password   = Request.Form("pass")
f_name     = Request.Form("fname")
l_name     = Request.Form("lname")

if((f_name <> null) or (f_name <> "")) then
    response.redirect("patti_account.asp")
else
    Set objConn = ConnectDB()
    query       = "INSERT INTO user (username,password,f_name,l_name) VALUES ('"& username &"','"& password &"','"& f_name &"','"& l_name &"')"
    Set objs    = objConn.Execute(query)

    Response.Redirect ("thankyou.asp")

end if

%>

我在运行页面时收到此错误:

用于 SQL 的 Microsoft OLE DB 提供程序 服务器错误“80040e14”

关键字附近的语法不正确 “用户”。

create_account.asp,第 18 行

我已经检查了所有内容,我的字段名存在并且我的表名也是正确的。

有什么建议吗?

【问题讨论】:

  • 你的代码充满了 SQL 注入,想想当我输入我的名字时会发生什么:';删除表用户;
  • TravisO - 如果我在客户端和服务器端都验证我的代码?
  • ...那种让 DBA 做噩梦的代码。

标签: sql asp-classic vbscript ado


【解决方案1】:

User 是 SQL Server 中的保留字。将其放入方括号中,例如[用户]

【讨论】:

  • 工作就像一个魅力!谢谢你马丁。我什至没有想过检查“用户”是否是保留字
【解决方案2】:

这很容易受到 SQL 注入的攻击。想象一下如果有人把这个作为姓氏会发生什么:

');DROP Table [user];--

修好它,否则我会亲自追踪你并用湿面条打败你,直到你这样做为止。

【讨论】:

  • 湿面打浆+1;关于注射的好点:)
  • 谢谢乔尔!我会确保密切关注这一点。再次感谢。瑞安
【解决方案3】:

尝试将其更改为:

query       = "INSERT INTO [user] (username,password,f_name,l_name) VALUES ('"& username &"','"& password &"','"& f_name &"','"& l_name &"')"

(表名是保留字,请转义)

此外,不要忘记验证键盘输入,因为此代码会受到 SQL 注入攻击。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多