看起来您的担心是有效的,ADO.NET有一组Connection String Builder类(尽管由于没有SQL而将其称为“连接字符串注入”与“SQL注入”更为准确参与)。既然你没有使用.NET,下一个最好的选择是输入消毒和转义特殊字符。该MSDN reference对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'\"
但是,这不适用于所有可能的输入。例如,当密码在分号前包含双引号时,测试脚本会给出错误。这可能是我错误地解释了指南。我不确定,但希望这至少可以让你开始。
此外,可能发生的最坏情况是什么?他们有一个用户ID,一个密码和一个服务器名称。有了它,他们可以连接到应用程序之外的数据库,并将数据转移到他们心中的内容。这只是他们被允许随着您在数据库中给予他们的帐户的赠款而改变的内容。如果他们想精心制作一个字符串来删除所有的表格,而且他们可以做到这一点,那是因为您首先向他们提供了这些权利。他们可以用任何ODBC SQL客户端来完成。 – BIBD 2011-02-05 15:41:40