從SQL注入談資料訪問層

2022-04-05 05:52:21 字數 1594 閱讀 3980

sql注入就是應用程式的開發人員未預期的吧sql語句傳入到應用程式的過程,如果直接使用使用者輸入的值來構建sql語句的應用程式是很可能會受到sql注入攻擊的。特別是基於瀏覽器的網路應用中,sql注入攻擊比較常見。

簡單來說就是使用使用者輸入的值來構建sql語句比如:

string sql="select * from userbase where id='"+txtid.text+"' and pwd='"+txtpwd.text+"'";

//使用『』「」的方式將使用者輸入的值包裹起來構建sql語句

demo

這時我們只要在「txtid」這個文字框中輸入「 『 or 1=1 -- 」這樣不管他輸入的賬號和密碼是否正確他都可以成功登陸你的應用程式,甚至還可以用這種方式自己構建sql語句直接對你的系統級別的資料庫進行操作

上面講述的這種構建sql語句的方式很容易受到sql注入的攻擊,而使用引數化命令可以有效的防止sql注入的攻擊。

如下:

1

string sql ="select * from userbase where id=@id and pwd=@pwd";//使用佔位符來佔位

2//給佔位符賦值

3 sqlparameter sp1=new sqlparameter("@id",txtid.text);

4 sqlparameter sp2=new sqlparameter("@pwd",txtpwd.text);

5//將引數值與command物件關聯

6 cmd.parameters.add(sp1);

7 cmd.parameter.add(sp2);

引數化命令的sql語句

上面示例中使用佔位符來標示在程式執行過程中需要動態進行替換的值,通過在sql文字引數前面加@符號實現。

ado.net命令物件使用乙個集合儲存離散的引數型別(3、4行**),即parameters集合。

使用者可以新增任意多的引數物件並對映到sql語句中的佔位符(6、7行**)。

dbtype

獲取或設定引數的dbtype

direction

獲取或設定乙個值,該值指示引數是只可輸入,只可輸出還是雙向儲存過程返回值引數

isnulllable

獲取或設定乙個值,該值指示引數是否接收空值

parametername

獲取或設定sqlparameter的名稱

size

獲取或設定列中資料的最大值

sqldbtype

獲取或設定引數的dbtype

value

獲取或設定該引數的值

1 cmd.commandtext="name";
demo

從SQL注入到getshell

mysql資料庫getshell條件是很苛刻的,必須滿足以下幾個條件 1 必須知道 的絕對路徑 2 要有file許可權,預設情況下只有root有,也就是dba為true 3 php的魔術引號 magic quotes gpc 沒有開啟 4 mysql的secure file priv變數的值為空 e...

資料訪問層

using system.collections.generic using system.data using system.data.common namespace adonetdataaccess.core.contract 上面的介面包括增刪改查,批量插入以及 資料庫連線物件的連線和關閉等...

資料訪問層

1 資料持久化 持久化是將程式中資料在瞬時狀態和持久狀態間轉換的機制。jdbc是一種持久化機制,將程式直接儲存成文字檔案也是持久化機制的一種實現。2 資料訪問模式 dao模式 dao dataaccessobjects,資料儲存物件 是指位於業務邏輯和持久化資料之間實現實現對持久化資料的訪問。dao...