python - 使用 Python 进行 SQL 注入
问题描述
我有以下问题:我需要一个动态创建语句,具体取决于我的对象具有哪些属性。
它的以下对象:
class Table:
columns = []
def __init__(self, name, columns):
self.columns = columns
self.name = name
def columnsNumber(self) -> int:
return self.columns.__len__()
这是插入的样子:
sql = "INSERT INTO tableOverview (tableName, columns, datum) VALUES(%s, %s, CURRENT_TIMESTAMP);"
val = (table.name, table.columns.__len__())
await cursor.execute(sql, (val))
for x in table.columns:
sql = "ALTER TABLE %s ADD COLUMN %s VARCHAR(100) UNIQUE " % (table.name,x)
await cursor.execute(sql)
现在我不知道如何防止 SQL 注入。
解决方案
对于ALTER TABLE
语句,您可以使用反引号引用标识符名称,如此处所述。
for x in table.columns:
sql = "ALTER TABLE `%s` ADD COLUMN `%s` VARCHAR(100) UNIQUE " % (table.name,x)
await cursor.execute(sql)
在插入语句中,代码已经正确使用参数替换来确保正确引用插入的值。
sql = "INSERT INTO tableOverview (tableName, columns, datum) VALUES(%s, %s, CURRENT_TIMESTAMP);"
val = (table.name, table.columns.len())
await cursor.execute(sql, val)