看起來您的擔心是有效的,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