首页 > 解决方案 > 使用 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 注入。

标签: pythonmysqlsql-injection

解决方案


对于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)

推荐阅读