如何在android中防止sql注入攻击?

问题描述 投票:0回答:1

所以我有以下代码的问题,并想知道是否有任何其他方式创建和删除表格从用户获取表格下面的代码在使用“'”单引号时给出错误。请帮忙

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);
}

有一个更好的方法吗?

java android sqlite
1个回答
3
投票

除非您的应用程序将导出SQLite数据库本身,并且用户打算在其他地方使用该SQLite数据库,否则用户将永远不会通过您的应用程序看到此表。

这为您提供了许多选择:

  1. 不要将用户输入的值用于表名。而是自己生成一个有效的表名,并保留生成的名称的映射以及用户输入的“显示名称”对于每个表的映射。
  2. 通过删除不支持的字符,将用户输入的值转换为有效的表名。
  3. 用户输入的值用引号("%s")包装,但如果用户输入带引号的表名,则会出现问题。
  4. 通过拒绝非标准字符作为EditText的一部分,防止用户输入无效的表名
  5. 如果用户输入的内容会导致SQL错误,请验证用户输入的值并显示错误对话框
© www.soinside.com 2019 - 2024. All rights reserved.