繁体   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