猿问

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

所以我在使用以下代码时遇到问题,想知道是否还有其他方法可以创建和删除表,其中表名取自用户,以下代码在使用“'”单引号时出错。请帮忙


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

}

有一个更好的方法吗?


互换的青春
浏览 277回答 1
1回答

慕雪6442864

除非您的应用程序将导出 SQLite 数据库本身,并且用户打算在其他地方使用该 SQLite 数据库,否则用户将永远不会看到此表,除非通过您的应用程序。这为您提供了多种选择:不要使用用户输入的值作为表名。相反,自己生成一个有效的表名,并保留生成的名称和用户输入的每个表的“显示名称”的映射。通过删除不受支持的字符,将用户输入的值转换为有效的表名。将用户输入的值括在引号 ( "%s") 中,但如果用户输入带引号的表名,则会出现问题。通过拒绝非标准字符作为您的一部分,防止用户输入无效的表名 EditText验证用户输入的值并在他们输入会导致 SQL 错误的内容时显示错误对话框
随时随地看视频慕课网APP

相关分类

Java
我要回答