繁体   English   中英

改进 SQL INSERT 查询以避免 sql 注入

[英]Improve SQL INSERT query to avoid sql injections

我正在使用 pymyql/mysql-connector 将消息写入 mysql 数据库。 消息在来自 mqtt 代理的回调(paho.mqtt 回调)上处理。我有 4 个不同的表,并且根据消息类型,我将消息插入到数据库中。 我已经编写了如下插入查询。 这种编写方式似乎会导致 sql 注入。有什么建议可以改进插入查询语句吗?

# callback attached to paho.mqtt.client    
def on_message(self, client, userdata, msg):

    if  msg.topic.startswith("topic1/"):
        self.bulkpayload += "(" + msg.payload.decode("utf-8") + "," + datetime + "),"
    elif msg.topic.startswith("topic2/"):
        self.insertStatement += "INSERT INTO mydatabase.table1 VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
    elif msg.topic.startswith("topic3/")   
        self.insertStatement += "INSERT INTO mydatabase.table2 VALUES (" +msg.payload.decode("utf-8") + "," + datetime + ");"
    elif msg.topic.startswith("messages"):
        self.insertStatement += "INSERT INTO mydatabase.table3 VALUES ('" + msg.topic + "',"  + msg.payload.decode("utf-8") + "," + datetime + ");"
    else:
    return  # do not store in DB

    cursor.execute(self.insertStatement)
    cursor.commit()

让您的查询使用参数。 注射的机会少得多:

cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

信用(和更多信息)在这里: 如何在 Python 中的 SQL 语句中使用变量?

此外,Dan Bracuk 是正确的 - 如果您还没有验证您的参数,请确保在执行 SQL 之前验证您的参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM