来自与Douglas Crockford一起学习Java语言的背景下,他特别强调不使用eval,并且受教育的背景表明,使用像exec这样的具有安全漏洞的通用掩盖方法只是一种不好的形式,无论如何都可以删除SQLite表是否存在,而不必诉诸execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE)
? current method documentation似乎暗示execSQL是唯一的方法,因为唯一的删除方法是:
删除数据库中行的便捷方法。
deleteDatabase用于数据库,而不用于表。
最佳答案
要执行DROP TABLE IF EXISTS,请使用execSQL
。
这不是JavaScript,其中能够从JavaScript内部执行JavaScript语句。
SQL是与Java不同的语言,因此构造SQL字符串是执行SQL的唯一方法。
除非攻击者能够控制eval
符号的内容,否则没有安全漏洞。
如果DATABASE_TABLE
函数对您来说太通用了,请创建一个execSQL
辅助函数,该函数为您格式化字符串(并正确设置quotes the identifier)。