Ms access MS Access-防止连接字符串中的SQL注入

Ms access MS Access-防止连接字符串中的SQL注入,ms-access,connection-string,sql-injection,Ms Access,Connection String,Sql Injection,我有一个Access数据库,必须以编程方式连接到Oracle才能创建链接表。连接字符串的格式为: ODBC;Driver={Microsoft ODBC for Oracle};Pwd=<Password>;UID=<User>;Server=<Server> ODBC;驱动程序={Microsoft ODBC for Oracle};Pwd=;UID=;服务器= 目前,登录信息是硬编码的 我现在必须让工具连接到不同的数据库。我只想让用户输入、和,然后将它

我有一个Access数据库,必须以编程方式连接到Oracle才能创建链接表。连接字符串的格式为:

ODBC;Driver={Microsoft ODBC for Oracle};Pwd=<Password>;UID=<User>;Server=<Server>
ODBC;驱动程序={Microsoft ODBC for Oracle};Pwd=;UID=;服务器=
目前,登录信息是硬编码的


我现在必须让工具连接到不同的数据库。我只想让用户输入
,然后将它们连接到一个连接字符串中。我非常确定这是SQL注入安全的,因为此时连接实际上并不存在,但我不是100%确定-这是一个有效的关注点,如果是,我将如何清理这些输入(来自自由格式文本字段)?

您的关注点似乎是有效的,ADO.NET有一组类这一事实就证明了这一点(虽然称之为“连接字符串注入”比“SQL注入”更准确,因为不涉及SQL)。由于您不使用.NET,下一个最佳选项是输入清理和转义特殊字符。OLEDB连接字符串语法声明:

要包括包含 分号、单引号字符或 双引号字符,值必须为 请用双引号括起来

如果该值同时包含 单引号和双引号 字符,使用的引号字符 若要包含此值,必须将其加倍 每次它出现在值内时

这是我编写的一个VBScript,它试图实现上述两个准则:

Option Explicit

Dim pw, connStr, conn

pw = InputBox("Enter password")

' Sanitize double quotes in the input string
pw = Replace(pw, Chr(34), Chr(34) & Chr(34))

' Notice how pw is surrounded by double quote characters
connStr = "Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;User ID=test_user;Password=" & Chr(34) & pw & Chr(34)

' Test the connection.  We'll get a runtime error if it didn't work
Set conn = CreateObject("ADODB.Connection")
conn.Open connStr
conn.Close
WScript.Echo "OK!"
如果我的密码是
app“le'\
,则连接字符串将以以下形式结束:

Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;User ID=test_user;Password="app""le'\"

但是,这并不适用于所有可能的输入。例如,当密码在分号之前包含双引号时,测试脚本会给出一个错误。这可能是因为我错误地解释了指南。我不确定,但希望这至少能让您开始使用。

这不是SQL注入,因为连接字符串不允许执行任意SQL代码


如果您允许用户从桌面访问数据库,那么SQL注入可能不是一个非常重要的问题。为什么有人会费心通过应用程序漏洞注入SQL,而他只需使用自己的有效凭据就可以轻松地创建连接呢?

此外,最糟糕的情况是什么会发生什么?他们有一个用户id、密码和服务器名。这样,他们就可以在应用程序之外连接到您的数据库,并将数据旋转到他们的心底。这将是唯一允许他们更改的,因为您授予了他们在数据库上的帐户。如果他们想仔细设计一个字符串来删除所有tabl是的,他们可以做到,这是因为你首先给了他们这些权利。他们可以用任何ODBC SQL客户机做到。