Что такое небезопасные (unsafe) HTTP-методы?

«Что такое небезопасные (unsafe) HTTP-методы?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Небезопасные HTTP-методы — это методы запроса, которые предназначены для действий, изменяющих состояние ресурса на сервере (создание, изменение, удаление). Они не являются идемпотентными (повторный идентичный запрос может дать разный результат) и часто не кешируемыми.

Основные небезопасные методы:

  1. POST — создание нового ресурса. (Например, отправка формы, создание заказа).
  2. PUT — полное обновление или создание ресурса по известному URI.
  3. PATCH — частичное обновление ресурса.
  4. DELETE — удаление ресурса.

Чем они отличаются от безопасных методов (GET, HEAD, OPTIONS)?

  • Цель: Изменение данных vs. получение данных.
  • Идемпотентность: PUT и DELETE — идемпотентны (многократный вызов дает тот же эффект, что и один), POST — нет.
  • Кеширование: Как правило, ответы на небезопасные методы не кешируются.

Пример уязвимости и защита:

# УЯЗВИМЫЙ КОД: DELETE без проверки прав доступа
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    user = User.query.get(user_id)
    db.session.delete(user)  # Критическая операция без авторизации!
    db.session.commit()
    return jsonify({'message': 'User deleted'}), 200

# ЗАЩИЩЕННЫЙ КОД
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
@auth_required  # 1. Проверка аутентификации
@require_permission('admin') # 2. Проверка роли/прав
@validate_input  # 3. Валидация ID
@log_operation   # 4. Логирование критичных действий
def delete_user(user_id):
    user = User.query.get_or_404(user_id)
    db.session.delete(user)
    db.session.commit()
    return jsonify({'message': 'User deleted'}), 200

Меры безопасности для небезопасных методов:

  • Обязательная аутентификация и авторизация.
  • Валидация и санитизация всех входных данных.
  • Использование CSRF-токенов для защиты от межсайтовой подделки запросов (в веб-приложениях).
  • Принцип наименьших привилегий: Предоставление минимально необходимых прав.
  • Строгое логирование всех операций изменения данных для аудита.