Как предотвратить атаки с использованием SQL-инъекций в discord bot python

#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’?