Взлом через input()
Проводил пробное собеседование по python для своего менти - узнал новое :) Как то коснулись темы форматирования строк, он быстро накидал примеры на f-strings, format() и %, и в конце - “… но если это именно пользовательский ввод, то безопаснее использовать шаблонные строки (template strings)”. Спрашиваю -“Подожди, что значит безопаснее? Какие могут быть риски?”
И он выдаёт красивый пример, как можно вытащить ключ из кода, используя форматную строку.
# Ваш секретный пароль
SECRET = "секретный пароль"
class Error:
def __init__(self):
pass
err = Error()
# Если ввести форматную строку '{error.__init__.__globals__[SECRET]}'
# , она может считать данные из общего словаря:
user_input = input("Введите свой текст:")
print("Ваш текст:")
print(user_input.format(error=err))
# Вывод: 'секретный пароль'
Да, если подумать, вероятность низкая - слишком много всего должно совпасть, чтобы это сработало. Но, красиво :)
Written on April 4, 2024