前言。
所謂sql注入,就是通過把sql命令插入到web
表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將(惡意的)sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入(惡意)sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。
比如先前的很多影視**洩露vip會員密碼大多就是通過web表單遞交查詢字元暴出的,這類表單特別容易受到
sql注入式攻擊.
原理 sql注入攻擊指的是通過構建特殊的輸入作為引數傳入web應用程式,而這些輸入大都是sql語法裡的一些組合,通過執行sql語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。
根據相關技術原理,sql注入可以分為平台層注入和**層注入。前者由不安全的資料庫配置或資料庫平台的漏洞所致;後者主要是由於程式設計師對輸入未進行細緻地過濾,從而執行了非法的資料查詢。基於此,sql注入的產生原因通常表現在以下幾方面:①不當的型別處理;②不安全的
資料庫配置;③不合理的查詢集處理;④不當的錯誤處理;⑤轉義字元處理不合適;⑥多個提交處理不當。
當應用程式使用輸入內容來構造動態sql語句以訪問資料庫時,會發生sql注入攻擊。如果**使用
儲存過程,而這些儲存過程作為包含未篩選的使用者輸入的字串來傳遞,也會發生sql注入。sql注入可能導致攻擊者使用應用程式登陸在資料庫中執行命令。相關的sql注入可以通過測試工具
pangolin進行。如果應用程式使用特權過高的帳戶連線到資料庫,這種問題會變得很嚴重。在某些
表單中,使用者輸入的內容直接用來構造動態sql命令,或者作為
儲存過程的輸入引數,這些表單特別容易受到sql注入的攻擊。而許多**程式在編寫時,沒有對使用者輸入的合法性進行判斷或者程式中本身的
變數處理不當,使應用程式存在安全隱患。這樣,使用者就可以提交一段資料庫查詢的**,根據程式返回的結果,獲得一些敏感的資訊或者控制整個伺服器,於是sql注入就發生了。
歸納一下,主要有以下幾點:
1.永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過
正規表示式,或限制長度;對單引號和
雙"-"進行轉換等。
2.永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用
儲存過程進行資料查詢訪問。
3.永遠不要使用
管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。
4.不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊。
5.應用的異常資訊應該給出盡可能少的提示,最好使用自定義的
錯誤資訊對原始錯誤資訊進行包裝
6.sql注入的檢測方法一般採取輔助
軟體或**平台來檢測,軟體一般採用sql注入檢測工具jsky,**平台就有億思
**安全平台檢測工具。mdcsoft scan等。採用
mdcsoft-ips可以有效的防禦sql注入,xss攻擊等。
介紹結束。
在這裡我採用的是sql引數化查詢,之前也蒐集了很多資料,總體比較混亂,先貼上本次的**:
string sqlsearchtagname1 = string.format("select distinct \"datatable\".\"name\" from \"datatable\" where \"name\"=:pname");
上面這句**與平時寫的語句相比,要特別關注:pname
這個是引數的名字。
oracleparameter param = new oracleparameter(":pname",oracledbtype.varchar2,40, "zhangsan");
param.value = ("zhangsan");
上面這兩句**是給引數:pname賦予屬性和值。
dbcmd = new oraclecommand(sqlsearchname1, conn);
dbcmd.parameters.add(param);
dbcmd.commandtype = commandtype.text;
dataadapter = new oracledataadapter();
dataadapter.selectcommand = dbcmd;
dtpointdata.clear();
dataadapter.fill(dtpointdata);
datatable tableselectname1 = dtpointdata;
string aaa= tableselectname1.rows[0][0].tostring();
此處**執行正確無誤。
SQL中如何避免書籤查詢
1 使用聚集索引 對於聚集索引,索引的葉子頁面和表的資料頁面相同。因此,當讀取聚集索引鍵列的值時,資料引擎可以讀取其他列的值而不需要任何導航。例如前面的區間資料查詢的操作,sqlserver通過b樹結構進行查詢是非常快速的。把非聚集索引轉換為乙個聚集索引說起來很簡單。但是,這個例子和大部分可能遇到的...
Oracle 查詢耗時 SQL
start 當你的系統變慢時,如何查詢系統中最耗時的 sql 呢?試一試下面的 sql 吧。select from select from v sqlstats 最耗時的 sql elapsed time 指的是總耗時 毫秒 平均耗時 elapsed time executions order by...
SQL連線查詢(Oracle)
sql聯表查詢 select from kdgs qrtz trigger info t,kdgs dbgate task d where t.id d.job id 對等連線,兩個表只有滿足條件相等的值顯示連線的所有字段 select from kdgs qrtz trigger info t j...