亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

攻擊方式學習之SQL注入(SQL Injection)

 更新時間:2008年09月06日 12:34:30   作者:  
有些網站將直接拿用戶的輸入 來拼接SQL語句,進行查詢等操作,同時也將錯誤信息暴露給用戶。

探測
非常簡單,輸入一個單引號('),看頁面是否出錯,要是頁面出錯了,而且又將錯誤信息暴露給你了那就太好了。
從錯誤信息中觀察確定是哪種數(shù)據(jù)庫,比如Access,SQL Server等。不同數(shù)據(jù)庫的SQL語句有些差別
靜態(tài)代碼分析,從代碼中檢查SQL語句是否是由字符串拼接而成。

實施方式
詳見示例網站

危害
變態(tài)性的,服務器被遠程控制,想干嘛干嘛。
盜取性的,盜取了數(shù)據(jù)庫中的機密信息,謀取私利或其他。
破壞性的,直接破壞數(shù)據(jù)庫。
修改性的,篡改數(shù)據(jù),比如通過大學成績查詢修改成績。
我也沒干過,想不出來了。

防范
在示例中也說明了如何防范,在這里再精煉一下所謂的防止SQL注入四大法寶:

最小權限原則
特別是不要用dbo或者sa賬戶,為不同的類型的動作或者組建使用不同的賬戶,最小權限原則適用于所有與安全有關的場合。
在服務器端對用戶輸入進行過濾
我 們要對一些特殊字符,比如單引號,雙引號,分號,逗號,冒號,連接號等進行轉換或者過濾;使用強數(shù)據(jù)類型,比如你需要用戶輸入一個整數(shù),就要把用戶輸入的 數(shù)據(jù)轉換成整數(shù)形式;限制用戶輸入的長度等等。這些檢查要放在server運行,client提交的任何東西都是不可信的。
以安全的方式創(chuàng)建SQL語句
不要再用萬惡的字符串拼接SQL語句了,使用Parameter對象吧,比如C#中的:
復制代碼 代碼如下:

string sqlText = "select * from [Users] where UserName = @Name";
SqlParameter nameParm = new SqlParameter("Name", uname);
sqlCmd.CommandText = sqlText;
sqlCmd.Parameters.Add(nameParm);

錯誤信息不要暴露給用戶
當sql運行出錯時,不要把數(shù)據(jù)庫返回的錯誤信息全部顯示給用戶,錯誤信息經常會透露一些數(shù)據(jù)庫設計的細節(jié)。

特別注意:也許有很多人告訴過你使用存儲過程能免受SQL注入攻擊。這是錯的!這只能阻止某些種類的攻擊。比如存在sp_GetName存儲過程,我們的代碼如下:
復制代碼 代碼如下:

string name = ...; //name from user
SqlConnection conn = new SqlConnection(...);
conn.Open();
string sqlString = @"exec sp_GetName '" + name + "'";
SqlCommand cmd = new SqlCommand(sqlString, conn);

我們試圖輸入"Black' or 1=1 --"將會失敗,但下面的操作卻是合法的:
exec sp_GetName 'Black' insert into Users values(2008, 'Green') -- '
參考資料
Michael Howard, David LeBlanc. "Writing Secure Code"
Mike Andrews, James A. Whittaker "How to Break Web Software"
http://www.secnumen.com/technology/anquanwenzhai.htm

相關文章

最新評論