SQL инъекции в телеграмм боте
Всем привет. Скачал исходник бота-магазина, все настроил и т.п., но слышал про такую штуку как SQL инъекции. Как проверить есть ли она в моем боте? Если есть, то как защититься ?
Сам попробовал методом тыка проверить есть ли она, но ничего дельного не вышло. Прошу помочь, если кто-то может.
Ответы (1 шт):
обратите внимание на код. если в нем есть места в которых вы получаете данные от пользователя и сразу же подставляете их в запрос, то это, скорее всего, уязвимость.
Ну вот такой гипотетический пример. Вы пытаетесь авторизовать пользователя по паролю. Пароль в БД.
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)
Просто держите в голове, любой юзер инпут это потенциальная уязвимость.