Ответ
Для построения защищенных приложений в Python используется комбинация встроенных и сторонних библиотек, каждая из которых решает свою задачу:
-
Хеширование паролей:
passlibПредоставляет удобный интерфейс для работы с современными криптографическими хеш-функциями (Bcrypt, Argon2). Защищает от подбора паролей по радужным таблицам в случае утечки базы данных.from passlib.context import CryptContext pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") hashed_password = pwd_context.hash("mysecretpassword") is_correct = pwd_context.verify("mysecretpassword", hashed_password) -
Шифрование данных:
cryptographyНизкоуровневая библиотека для симметричного (AES) и асимметричного (RSA) шифрования. Используется для защиты конфиденциальных данных при хранении или передаче.from cryptography.fernet import Fernet key = Fernet.generate_key() cipher_suite = Fernet(key) encrypted_text = cipher_suite.encrypt(b"A really secret message.") -
Защита от SQL-инъекций: ORM (SQLAlchemy, Django ORM) Использование ORM вместо формирования сырых SQL-запросов является лучшей практикой. Они автоматически экранируют параметры, предотвращая атаки типа SQL-инъекций.
-
Аутентификация и авторизация:
PyJWT,python-joseБиблиотеки для работы с JSON Web Tokens (JWT), которые являются стандартом для аутентификации в современных API. Они позволяют безопасно создавать, подписывать и проверять токены. -
Статический анализ уязвимостей:
banditИнструмент для статического анализа кода (SAST), который сканирует вашу кодовую базу на предмет распространенных уязвимостей, таких как использование небезопасных модулей или жестко закодированных паролей.
Важно: Безопасность — это комплексный подход. Помимо библиотек, необходимо следить за своевременным обновлением зависимостей, валидировать все входящие данные и придерживаться принципа наименьших привилегий.
Ответ 18+ 🔞
А, ну ты про безопасность в питоне заговорил! Ну, слушай, тут дело такое, блядь. Чтобы твоё приложение не превратилось в решето, куда любой школьник с гитхаба скрипт закинет, надо эти вот, блядь, инструменты в дело пустить. Но не абы как, а с умом, ёпта!
Вот смотри, первое дело — пароли. Ты их в открытую в базе хранить не вздумай, а то будет как в той истории с Герасимом — всех поубиваешь, а потом совесть загложет, блядь. Для этого есть passlib. Он пароли так захеширует, что даже родная мать не узнает. Берёт твой «123456», и делает из него вот эту, блядь, нечитаемую абракадабру. А потом может проверить, что человек ввёл именно «123456», не расшифровывая её обратно. Магия, сука!
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
hashed_password = pwd_context.hash("mysecretpassword") # Вот тут твой пароль и превращается в эту, блядь, тарабарщину
is_correct = pwd_context.verify("mysecretpassword", hashed_password) # А тут проверяется — соврал человек или нет
Дальше, если у тебя есть какие-то сверхсекретные данные — номера карт, любовные письма, список запрещённых сайтов — их надо шифровать. Тут в бой идёт cryptography. Он тебе ключ сгенерирует, и этим ключом, как от сейфа, всё закроет. Без ключа — только белый шум и слёзы.
from cryptography.fernet import Fernet
key = Fernet.generate_key() # Родил ключик, блядь
cipher_suite = Fernet(key)
encrypted_text = cipher_suite.encrypt(b"A really secret message.") # И замуровал сообщение, демоны!
А теперь главное, блядь! SQL-инъекции! Это когда какой-нибудь хитрожопый уёбок в поле для логина вписывает не «Вася», а целую команду на удаление всей базы. Чтобы такого не было, НИКОГДА, слышишь, НИКОГДА не лепи SQL-запросы строкой, как последний ламер. Используй ORM — SQLAlchemy там или от Django. Они там всё за тебя продезинфицируют, как хирурги перед операцией. Это как дать Герасиму не мешок с камнями, а инструкцию от барыни — он сделает всё чётко и без самодеятельности, блядь.
Ну и куда же без токенов, эти ваши JWT! Когда пользователь залогинился, ты ему не сессию на сервере храни, а выдай билетик — токен. Библиотеки PyJWT или python-jose тебе его красиво подпишут. Пользователь этот токен потом с каждым запросом предъявляет, как пропуск на завод. А ты проверяешь — не поддельный ли, не просроченный ли. Удобно, сука!
И наконец, bandit. Это такой сторожевой пёс, Муму, только не глухонемой, а очень даже говорящий. Он твой код прочёсывает и тычет мордой: «Смотри, дурак, тут ты пароль в конфиг в открытую засунул! А тут небезопасную функцию используешь!». Запускай его перед каждым коммитом, чтобы не облажаться на ровном месте.
Но запомни, ёпта: безопасность — это не одна библиотека, это состояние ума! Это как строить дом: можно поставить суперзамок на дверь, но оставить окно нараспашку. Обновляй зависимости, проверяй все данные, которые к тебе приходят (вдруг там не текст, а скрипт на удаление всего), и давай права по минимуму. А то будет — «ой, я думал, оно само как-нибудь», а потом пиздец, накрылся медным тазом весь твой стартап!