gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:21:35 24 4
gpt4 key购买 nike

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

问题一:我不断收到错误消息“SQLError: near "?": syntax error” 由于我的语句包含多个 ?,因此很难找出到底哪里出了问题。那有什么问题呢?

问题二:我知道 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com