Ответ
Небезопасные HTTP-методы — это методы запроса, которые предназначены для действий, изменяющих состояние ресурса на сервере (создание, изменение, удаление). Они не являются идемпотентными (повторный идентичный запрос может дать разный результат) и часто не кешируемыми.
Основные небезопасные методы:
POST— создание нового ресурса. (Например, отправка формы, создание заказа).PUT— полное обновление или создание ресурса по известному URI.PATCH— частичное обновление ресурса.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-токенов для защиты от межсайтовой подделки запросов (в веб-приложениях).
- Принцип наименьших привилегий: Предоставление минимально необходимых прав.
- Строгое логирование всех операций изменения данных для аудита.