#python #sql #discord.py #sql-injection #discord.py-rewrite
#python #sql #discord.py #sql-инъекция #discord.py-переписать
Вопрос:
Для моего discord бота я использую sqlite в качестве своей базы данных. Многие люди говорили, что использование sqlite нехорошо, потому что вы можете получить SQL-инъекцию. Они рекомендовали мне использовать aiosql.
Я знаю, как sql-инъекции работают на веб-сайте, но я не знаю, как это можно сделать в discord bot. Я хочу знать, как такого рода SQL-атаки работают на discord bot. Я также хочу знать способ предотвратить эту атаку в будущем.
Это пример моего кода.
@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
Комментарии:
1. Вы не используете
f
-strings для построения SQL. Вы используете способ, описанный в документах .
Ответ №1:
cursor.execute(f"SELECT welcome_id FROM Main Where guild_id = {ctx.guild.id}")
эта строка в значительной степени является единственным источником беспокойства,
Вероятно, это было бы нормально, но по-прежнему не рекомендуется использовать f-строку при создании инструкции SQL.
в остальном все остальные запросы, по-видимому, обработаны правильно, и вы не уязвимы для SQL-инъекции
Комментарии:
1. Не могли бы вы сказать мне, что мне нужно изменить? что мне использовать вместо строки F’?