簡體   English   中英

如何防止android中的sql注入攻擊?

[英]how to prevent sql injection attack in android?

所以我在以下代碼上遇到了問題,並且想知道是否還有其他創建和刪除表的方式,其中從用戶那里獲取表名稱時,以下代碼在使用“”單引號時給出了錯誤。 請幫忙

public void droptable(String tablename) {
    SQLiteDatabase db =this.getWritableDatabase();
    db.execSQL("DROP TABLE IF EXISTS " + tablename);

}
 public void createtable(String tablename)
{
    SQLiteDatabase db = this.getWritableDatabase();
    String query = String.format("CREATE TABLE IF NOT EXISTS %s ( %s INTEGER PRIMARY KEY AUTOINCREMENT , %s TEXT )",tablename,COLUMN0,COLUMN1);
    db.execSQL(query);
}

有一個更好的方法嗎?

除非您的應用程序將導出SQLite數據庫本身,並且用戶打算在其他地方使用該SQLite數據庫,否則除非通過您的應用程序,否則該用戶將永遠不會看到此表。

這給您許多選擇:

  1. 請勿將用戶輸入的值用作表名。 而是自己生成一個有效的表名,並保留生成的名稱與每個表的用戶輸入“顯示名稱”的映射。

  2. 通過刪除不支持的字符,將用戶輸入的值轉換為有效的表名。

  3. 將用戶輸入的值括在引號( "%s" )中,但是如果用戶輸入帶引號的表名,則會遇到問題。

  4. 通過拒絕非標准字符作為您的EditText一部分,防止用戶輸入無效的表名

  5. 驗證用戶輸入的值並顯示錯誤對話框(如果鍵入)會導致SQL錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM