如何防止不和谐机器人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注入攻击的主要内容,如果未能解决你的问题,请参考以下文章