python - 3个涉及Python和SQLite的问题

标签 python sqlite apsw

我正在创建与游戏服务器一起使用的函数。该服务器使用插件。我有这些使用 SQLite 数据库的函数,以及 apsw 来检索另一个函数存储的项目。我对此有 3 个问题。

问题一:我不断收到错误“SQLError:near “?”:语法错误” 由于我的语句具有多个 ?,因此很难找出到底是什么错误。那么出了什么问题呢?

问题二:我了解 SQL 注入(inject),但这些函数只接受脚本运行者的输入,而他唯一会破坏的东西就是他自己的东西。即便如此,有没有一种简单的方法可以证明 SQL 注入(inject)?

问题三:有什么办法可以让这个功能更加高效吗?

这是现在的样子:

def readdb(self,entry,column,returncolumn = "id,matbefore,matafter,name,date"):
    self.memwrite
    if isinstance(entry, int) or isinstance(entry, str):
        statement = 'SELECT {0} FROM main WHERE {1} IN {2}'.format(returncolumn,column,entry)
        self.memcursor.execute(statement)
        blockinfo = self.memcursor.fetchall()
        return(blockinfo)
    if isinstance(entry, tuple) or isinstance(entry, list):
        statement = '''SELECT {0} FROM main WHERE {1} IN (%s)'''.format(returncolumn,column)
        self.memcursor.execute(statement % ("?," * len(entry))[:-1], entry)
        blockinfo = self.memcursor.fetchall()
        return(blockinfo

最佳答案

这很有趣(请继续阅读以了解原因)。

您的第一个语句实际上使用了 sqlite3 模块的值绑定(bind)机制(我假设这就是您使用的)。因此,*(默认列)被转义,使得语句无效。这是 SQL 注入(inject)证明,您自己的代码会尝试注入(inject) SQL(现在看到有趣的事情了吗?)。

第二次使用 Python 字符串替换来构建查询字符串,这不是 SQL 注入(inject)证明。

关于python - 3个涉及Python和SQLite的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114708/

相关文章:

c++ - SQLDataBase setDatabaseName 在 QT 中不起作用

java - 当我显式创建一个时,SQLite 会创建两个 rowid

python - 列数据类型受其他地方使用的影响

python - 无法在Python中调用C++类函数

python - 使用 Spark Streaming 读取脚本的输出输出

python - 关于 Tensorflow 和 PyTorch 中的自定义操作

python - 如何在 Python 中将 *所有* 字符转义为相应的 html 实体名称和数字?

javascript - 需要将 javascript 值传递到 html 格式的建议,这样我就可以显示正确答案的成绩屏幕而不是 'document.write'

python - 获取 APSW 中的所有内容