【发布时间】: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中解释的方式。
标签: python sql discord.py sql-injection discord.py-rewrite