Какие библиотеки Python используются для реализации основных механизмов защиты в приложениях?

Ответ

Для построения защищенных приложений в Python используется комбинация встроенных и сторонних библиотек, каждая из которых решает свою задачу:

  1. Хеширование паролей: 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)
  2. Шифрование данных: 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.")
  3. Защита от SQL-инъекций: ORM (SQLAlchemy, Django ORM) Использование ORM вместо формирования сырых SQL-запросов является лучшей практикой. Они автоматически экранируют параметры, предотвращая атаки типа SQL-инъекций.

  4. Аутентификация и авторизация: PyJWT, python-jose Библиотеки для работы с JSON Web Tokens (JWT), которые являются стандартом для аутентификации в современных API. Они позволяют безопасно создавать, подписывать и проверять токены.

  5. Статический анализ уязвимостей: 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. Это такой сторожевой пёс, Муму, только не глухонемой, а очень даже говорящий. Он твой код прочёсывает и тычет мордой: «Смотри, дурак, тут ты пароль в конфиг в открытую засунул! А тут небезопасную функцию используешь!». Запускай его перед каждым коммитом, чтобы не облажаться на ровном месте.

Но запомни, ёпта: безопасность — это не одна библиотека, это состояние ума! Это как строить дом: можно поставить суперзамок на дверь, но оставить окно нараспашку. Обновляй зависимости, проверяй все данные, которые к тебе приходят (вдруг там не текст, а скрипт на удаление всего), и давай права по минимуму. А то будет — «ой, я думал, оно само как-нибудь», а потом пиздец, накрылся медным тазом весь твой стартап!