Android可能出現的SQL注入以及防範

2021-09-23 21:58:14 字數 2418 閱讀 3231

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將(惡意的)sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入(惡意)sql語句得到乙個存在安全漏洞的**上的資料庫,而不是按照設計者意圖去執行sql語句。

不只是常見的mysql,oracle資料庫,sqlite資料庫如果出現sql語句書寫不規範,也可能出現sql注入。以下是乙個登入功能的**:

/**

* 讀取userdata.db中的使用者資訊

* */

protected void readuserinfo() else

}/**

* 驗證登入資訊

* */

public boolean login(string username, string password)

return false;

}

我們可以看到這段**中,資料庫查詢語句是依靠字串拼接組成查詢語句,這樣很容易發生sql諸注入!

string sql = "select *from usertable where username='"+username+"'"+"and password='"+password+"'";
為什麼會產生sql注入呢?

我們根據這個簡單的註冊登入專案來解釋。

首先註冊乙個賬號,賬號密碼都為123。

這時我們來驗證一下登入功能。

我們輸入正確的賬號密碼 ,可以看到登入成功。

我們輸入錯誤的密碼,登入失敗,證明登入功能是正常的。

這時候,我們在賬號中輸入123』or』1=1 密碼輸入乙個錯誤的12,我們可以看到,他也是登入成功了。為什麼呢?

因為賬號輸入123』or』1=1,密碼輸入12此時sql查詢語句就變成

select *from usertable where username='123 ' or ' 1=1' and password = ' 12 ';
這條語句意味著,只要賬號密碼中,其中乙個輸入是正確的再加上or 1=1 (永真),此查詢語句就能夠查詢到資料庫中的值,騙過伺服器從而進入到登入成功的頁面,登入成功還是輕的,假設再加上一條語句drop table ***呢…後果不堪設想。

我們修改一下登入功能的**

string sql = "select *from usertable where username=? and password=?";

cursor cursor = db.rawquery(sql,new string);

這時候我們在嘗試用剛才sql注入的方法登入看看

發現此時sql注入已經失效。

此方法是通過使用佔位符?,代表我們要輸入的引數。rawquery函式中的第乙個引數是sql語句,第二個引數new string替換掉sql語句中的佔位符,因為此時123』or』1=1是乙個整體,代表username ,所以不會對查詢語句產生影響。

1.永遠不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正規表示式,或限制長度;對單引號 和雙"-"進行轉換等。

2.永遠不要使用動態拼裝sql,可以使用引數化的sql或者直接使用儲存過程進行資料查詢訪問。

3.永遠不要使用管理員許可權的資料庫連線,為每個應用使用單獨的許可權有限的資料庫連線。

4.不要把機密資訊直接存放,加密或者hash掉密碼和敏感的資訊。

5.應用的異常資訊應該給出盡可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝

6.sql注入的檢測方法一般採取輔助軟體或**平台來檢測,軟體一般採用sql注入檢測工具jsky,**平台就有億思**安全平台檢測工具。mdcsoft scan等。採用mdcsoft-ips可以有效的防禦sql注入,xss攻擊等。

Mysql匯入sql檔案可能出現的問題

mysql匯入sql檔案可能出現的問題 1 可能出現的錯誤 本地匯入sql檔案時,出現 mysql server has gone away 的錯誤 2 問題分析 mysql server has gone away 的問題意思就是指client和mysql server之間的鏈結斷開了。造成這樣的...

jupyter notebook可能出現的問題

首頁 專欄python 文章詳情 1 無道 發布於 2020 07 23 環境 anaconda,python3.7,jupyter notebook,win10 終端上配置有多個conda的python環境,在使用jupyter notebook時需要使用其中的乙個環境,但是其預設還是使用系統py...

遞迴可能出現的效能問題

遞迴演算法的 很簡潔。但同時也存在缺點。遞迴由於函式要呼叫自身,而函式呼叫是有時間和空間的消耗的。每一次函式呼叫,都需要在記憶體棧中分配空間以儲存引數 返回位址及臨時變數,而且往棧裡壓入資料和彈出資料都需要時間。遞迴有可能很多計算都是重複的,從而對效能帶來很大的負面影響。遞迴的本質是把乙個問題分解成...