回答
不,完全沒有。
例如,我仍然可以輸入自己的用戶名是:
; DELETE FROM Users --
這仍然取決於您的數據庫結構和應用程序代碼,擦拭您的整個用戶表。
爲了充分保護自己免受SQL注入攻擊,您應該轉義任何用戶輸入並使用參數化查詢或存儲過程(如果您使用的是存儲過程,請確保您沒有在存儲過程中動態生成SQL )與數據庫進行交互。
您應該將值作爲參數傳遞給存儲過程。無論用戶進入這種方式只是當作一個值,而不是附加到聲明和執行
不應該去尋找自己的用戶名/密碼的特殊字詞/字符。因爲你總是會錯過什麼。
相反,如果你有嵌入式SQL,你應該使用參數化查詢。如果你這樣做了所有的查詢,那麼你將從sql注入安全。現在,XSS是整個其他事項..;)
這已經深入介紹這個網站,只要搜索SQL注入。
使用存儲過程或參數化查詢將防止SQL注入。
1)除此之外,如果使用的是ASP.NET,可以啓用頁級別屬性「ValidateRequest =真」,其可以驗證是否有任何輸入字符串的可導致腳本注射
2 )確保您不會向最終用戶顯示實際的系統生成錯誤。這將導致黑客進一步探測並破壞系統。
3)如果您使用的是Web服務消費和數據同步到你的數據庫,持久化數據之前驗證所有必要的字段。
這裏是一個很好的堆棧溢出鏈接:What is SQL injection?
其次,不要忘了,不要緊,你在UI做驗證,人們總是可以構建自定義的HTTP請求,並將它們發送到您的服務器(使用螢火蟲編輯很簡單)。
絕對不是!
避免SQL注入的最簡單方法是使用參數化查詢。
看到這個SO問題:Preventing SQL Injection in ASP.Net VB.Net
及其所有的答案給你的想法。
總之,我從來沒有使用串聯字符串查詢,但總是參數。這樣就沒有任何危險,這是防止SQL注入最安全的方法。
像其他人一樣說。參數化輸入。
下面是我在工作中編寫的一些代碼(已刪除特定工作代碼)的代碼片段。這並不完美,但我的主要工作不是編程,而我在寫這篇文章時仍在研究C#。如果我現在寫這個,我會用一個datareader而不是一個數據集。
但是請注意,我是如何使用「da.SelectCommand.Parameters.AddWithValue」使用變量在實際的SQL字符串,並指定變量
public Boolean Login(string strUserName, string strPassword)
{
SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();
DataSet ds = null;
SqlDataAdapter da = null;
sqlConn.ConnectionString = strConnString;
try
{
blnError = false;
sqlConn.Open();
ds = new DataSet();
da = new SqlDataAdapter("select iuserid from tbl_Table where vchusername = @vchUserName and vchpassword = @vchPassword", sqlConn);
da.SelectCommand.Parameters.AddWithValue("@vchUserName", strUserName);
da.SelectCommand.Parameters.AddWithValue("@vchPassword", strPassword);
da.SelectCommand.CommandTimeout = 30;
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
iUserId = (int)ds.Tables[0].Rows[0]["iuserid"];
}
}
catch (Exception ex)
{
blnError = true;
Log("Login: " + ex.Message);
}
finally
{
if (sqlConn.State != ConnectionState.Closed)
sqlConn.Close();
if (da != null)
da.Dispose();
if (ds != null)
ds.Dispose();
}
if (blnError)
return false;
if (iUserId > 0)
return true;
return false;
}
- 1. 阻止SQL注入C
- 2. PHP阻止SQL注入
- 3. PHP MySQLI阻止SQL注入
- 4. 從SQL注入保護應用程序
- 5. DownloadFileAsync阻止我的應用程序
- 6. 在PHP Web應用程序中阻止JavaScript注入
- 7. CGEventTap阻止應用程序輸入
- 8. 從我的應用程序中阻止/取消阻止某個應用程序:Android
- 9. MessageBox阻止從應用程序退出
- 10. 阻止從一個Win32應用程序
- 11. 阻止應用程序
- 12. CodeIgniter會自動阻止SQL注入嗎?
- 13. 僅SSL是否阻止SQL注入?
- 14. 從gac載入dll阻止應用程序
- 15. 防止SQL注入 - PHP程序
- 16. 阻止顯示的Excel應用程序
- 17. 阻止盜版應用程序的人
- 18. 如何阻止路由器阻止我的應用程序網絡通信
- 19. 自動阻止應用程序從啓動程序啓動
- 20. Windows 7阻止了我的應用程序。我該怎麼辦?
- 21. 我想在我的應用程序中阻止權限(Manifest.permission.READ_LOGS)
- 22. C#Windows應用程序阻止Windows關閉/註銷
- 23. 我安全嗎? [試圖阻止SQL注入]
- 24. 使用C#阻止應用程序
- 25. 阻止用戶訪問應用程序
- 26. SQL CLR存儲過程是否阻止注入?
- 27. Asp.net阻止HTML注入?
- 28. 阻止任何內存或DLL文件注入到特定應用程序
- 29. 如何阻止ICS用戶下載我的應用程序
- 30. 如何在我的應用程序中阻止用戶(swift + parse)
哇,沒有你的地址限制SQL注入輸入。它的完全引用標記和整型轉換。 – rook 2010-11-08 18:05:02
你沒見過[羅伯特'); DROP TABLE Students; - ](http://xkcd.com/327/)呢? ;) – takeshin 2010-11-08 19:01:22