2010-01-12 45 views
1

我有一個表單,用戶可以在我的大學裏爲一個房間輸入他們的預訂。我想驗證用戶輸入,以避免SQL注入(我的程序使用MS Access數據庫),也停止在他們的名字,數字和synobols等在VB.NET中做了很多輸入驗證

我可以做的驗證罰款,但將有很多的驗證,然後只有在所有驗證測試恢復正確的情況下才執行方法。我確實有這樣的事情:

If txtName.Text = "" Then 
    frmBookErr.SetError(txtName, "Name field cannot be left blank.") 
    fail = 1 
Else 
    frmBookErr.SetError(txtName, "") 
    fail = 0 
End If 

再檢查fail變量,但它顯然是被後來的形式重寫如果驗證測試的一個回來爲真。

任何人都可以提供一些輸入到這?謝謝。

+1

這不會幫助你的SQL注入的問題,但默認情況下,在故障變量該函數的開始等於0,然後只在代碼的其餘部分將其設置爲1,以防止出現問題。那麼它不會被覆蓋。 – Walter 2010-01-12 13:21:09

回答

1

如果您想避免SQL注入,請使用參數化的SQL查詢或存儲過程,並且不要通過串聯構造SQL。

+0

請注意,如果存儲過程使用串聯,則不會再提前。 – 2015-07-10 19:22:39

+0

因此「不要通過串聯構造SQL」... – 2015-07-11 09:24:59

0

爲避免SQL注入,您需要使用不直接允許SQL查詢中的更改的內容。

現在這並不意味着你不能提供值,這意味着你強烈指定你想要處理的服務器類型。

Example from CodeProject

string commandText = "SELECT * FROM Customers "+ 
    "WHERE [email protected]"; 
SqlCommand cmd = new SqlCommand(commandText, conn); 
cmd.Parameters.Add("@CountryName",countryName); 

代替設置countrName爲concated string,你居然告訴你的SQL命令,你將它作爲一個參數,它不會允許在查詢本身的任何變化。

1

設置你的失敗變量在程序0,那麼只有當事情無法將其設置爲1的開始...

fail = 0 
    If txtName.Text = "" Then 
     frmBookErr.SetError(txtName, "Name field cannot be left blank.") 
     fail = 1 
    End If 
    If txtSomethingElse.Text = String.Empty Then fail = 1 
    If fail = 0 Then frmBookErr.Clear()