表名称的占位符



我正在处理可编辑的表。并且想询问表名称的占位符。我尝试了很多方法,但都不起作用。这样做安全吗?以及如何做到这一点?

我读过很多人讨论这件事,但似乎很复杂。有人能给我一个简单的答案吗?

id = request.args.get('id')
column = request.args.get('column')
newValue = request.args.get('newValue')
g.db = connect_db()
cur = g.db.execute('UPDATE customer SET %=? WHERE rowid=?', %(column), newValue, id))
g.db.commit()
g.db.close()

安全性取决于要使用的列名和表名的来源。如果你从不可信的来源获得它们,它可能是不安全的。在任何一种情况下,变量表/列名都是不安全的,因为不存在的表/列可能会出现运行时错误。

对于您的代码,不使用表或列名的占位符。原因是,尽管具有不同绑定变量的SQL在所涉及的表、执行计划等方面是相等的(即等效编译),但具有不同表名或列的SQL显然是不相等的。

你可以这样做:

sql_template = 'UPDATE {table} SET {column}=? WHERE rowid=?'
sql = sql_template.format(table=table_name, column=column_name)
db.execute(sql, (newValue, id))

相关内容

  • 没有找到相关文章

最新更新