SQL инъекции в телеграмм боте

Всем привет. Скачал исходник бота-магазина, все настроил и т.п., но слышал про такую штуку как SQL инъекции. Как проверить есть ли она в моем боте? Если есть, то как защититься ?

Сам попробовал методом тыка проверить есть ли она, но ничего дельного не вышло. Прошу помочь, если кто-то может.


Ответы (1 шт):

Автор решения: alex

обратите внимание на код. если в нем есть места в которых вы получаете данные от пользователя и сразу же подставляете их в запрос, то это, скорее всего, уязвимость.

Ну вот такой гипотетический пример. Вы пытаетесь авторизовать пользователя по паролю. Пароль в БД.

def echo(update: Update, context: CallbackContext):
    if session.execute(f"select * from jeeves_wallet where address='{update.message.text}'").fetchone():
        r = "success"
    else:
        r = "denied"
    context.bot.send_message(chat_id=update.effective_chat.id, text=r)

Тогда пользователь вместо пароля, может отправить такую штуку anytext' or true-- и это его авторизует.

Вот такие места, прямого использования пользовательского ввода в коде программы нужно найти и как-то исправить. Этот пример исправляется довольно просто

def echo(update: Update, context: CallbackContext):
    if session.execute(f"select * from jeeves_wallet where address='%s'", update.message.text).fetchone():
        r = "success"
    else:
        r = "denied"
    context.bot.send_message(chat_id=update.effective_chat.id, text=r)

Также поможет и нормальное использование ORM

def echo(update: Update, context: CallbackContext):
    if PasswordsTable.query.filter_by(phrase=update.message.text).first():
        r = "success"
    else:
        r = "denied"
    context.bot.send_message(chat_id=update.effective_chat.id, text=r)

Просто держите в голове, любой юзер инпут это потенциальная уязвимость.

→ Ссылка