来自与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)。

09-04 12:56