我已經學會了如何在我的數據庫中插入數據時參數化我的文本框,現在我想在爲SQL數據庫手動放置連接字符串的同時實現相同的技術。我的代碼是這樣的:如何參數化用戶在C#中輸入連接字符串的方式?
connectionString = "server=localhost;uid=" + usr.Text + ";pwd=" + pwd.Text;
而且我認爲它很容易被SQL注入。有什麼建議麼?
我已經學會了如何在我的數據庫中插入數據時參數化我的文本框,現在我想在爲SQL數據庫手動放置連接字符串的同時實現相同的技術。我的代碼是這樣的:如何參數化用戶在C#中輸入連接字符串的方式?
connectionString = "server=localhost;uid=" + usr.Text + ";pwd=" + pwd.Text;
而且我認爲它很容易被SQL注入。有什麼建議麼?
由於在這種情況下沒有使用SQL,因此它不容易受到SQL注入的攻擊。您不能通過在連接字符串中指定任何內容來訪問表和記錄,也不能僅通過指定連接字符串來接收數據。
它是容易連接字符串屬性注入,因爲尼古拉在他的答案中提到。另見問題「MS Access - prevent SQL injection in connection string」。
正如Mark所說,這裏沒有SQL注入漏洞。但僅僅爲了可讀性,我願意與:
connectionString = string.Format("server=localhost;uid={0};pwd={1}", usr.Text, pwd.Text);
但它不安全,行爲相同。
根據您使用的提供程序,您可以使用.NET框架中提供的一個連接字符串構建器類。
http://msdn.microsoft.com/en-us/library/ms254947%28v=VS.100%29.aspx
有任何連接字符串注入攻擊沒有明確的答案。我無法看到通過更改連接屬性來執行攻擊的方法。但是,微軟在我上面發佈的鏈接中提到了這種攻擊,但沒有詳細說明這種攻擊會發生什麼。充其量(或最差)的攻擊者可能會改變連接的某些屬性,可能會增加超時並希望以這種方式對服務器進行DDoS攻擊。
但是,我的程序發生了一些奇怪的事情。如果我在兩個文本框中都放置了一些默認的SQL注入代碼('OR'1),應用程序會一直運行,當它顯示錯誤消息說登錄失敗。我正在使用控制SQLException n.1045的try-catch子句,但不會引發異常。 – ZShock