如何防止不和谐机器人python中的SQL注入攻击

Posted

技术标签:

【中文标题】如何防止不和谐机器人python中的SQL注入攻击【英文标题】:How to prevent SQL injection attacks in discord bot python 【发布时间】:2021-05-01 01:01:22 【问题描述】:

对于我的不和谐机器人,我使用 sqlite 作为我的数据库。很多人说使用 sqlite 不好,因为你可能会被注入 SQL。他们推荐我使用 aiosql。

我知道 sql 注入如何在网站上工作,但我不知道如何在 discord bot 中完成。我想知道这种 SQL 攻击在不和谐机器人上的工作方式。我也想知道一种方法来防止这种攻击在未来发生。

这是我的代码示例。

@client.command()
@commands.has_permissions(administrator=True)
async def setwelcome(ctx , channel:discord.TextChannel):
    db = sqlite3.connect('Smilewin.sqlite')
    cursor = db.cursor()
    cursor.execute(f"SELECT welcome_id FROM Main Where guild_id = ctx.guild.id")
    result = cursor.fetchone()
    if result is None:
        sql = ("INSERT INTO Main(guild_id, welcome_id) VALUES(?,?)")
        val = (ctx.guild.id , channel.id)

        embed = discord.Embed(
            colour= 0x00FFFF,
            title = "ตั้งค่าห้องเเจ้งเตือนคนเข้าเซิฟเวอร์",
            description= f"ห้องได้ถูกตั้งเป็น channel.mention"
        )

        message = await ctx.send(embed=embed)
        await message.add_reaction('✅')

    elif result is not None:
        sql = ("UPDATE Main SET welcome_id = ? WHERE guild_id = ?")
        val = (channel.id , ctx.guild.id)
        
        embed = discord.Embed(
            colour= 0x00FFFF,
            title= "ตั้งค่าห้องเเจ้งเตือนคนเข้าเซิฟเวอร์",
            description= f"ห้องได้ถูกอัพเดตเป็น channel.mention"
        )
        
        message = await ctx.send(embed=embed)
        await message.add_reaction('✅')

    cursor.execute(sql, val)
    db.commit()
    cursor.close()
    db.close()

完整的代码将在下面的链接中: https://github.com/reactxsw/Smilewinbot/blob/main/SmileWinbot.py

【问题讨论】:

你不使用f-strings 来构造SQL。你使用docs中解释的方式。 【参考方案1】:
cursor.execute(f"SELECT welcome_id FROM Main Where guild_id = ctx.guild.id")

这条线几乎是唯一值得关注的地方,

这可能没问题,但使用 f-string 仍然是不好的做法 在构造 SQL 语句时。

否则,所有其他查询似乎都已正确清理,并且您不容易受到 SQL 注入的攻击

【讨论】:

你能告诉我我需要编辑什么吗?我用什么代替 F' 字符串?

以上是关于如何防止不和谐机器人python中的SQL注入攻击的主要内容,如果未能解决你的问题,请参考以下文章

如何防止网站不被SQL注入攻击

如何防止sql注入攻击?

使用“database/sql”时如何防止 Go 中的 SQL 注入攻击?

MyBatis如何防止SQL注入

MyBatis怎么防止SQL注入

什么叫sql注入,如何防止sql注入