Skip to main content

V13.2.1 RESTful Web Service

Requirement:#

Verify that enabled RESTful HTTP methods are a valid choice for the user or action, such as preventing normal users using DELETE or PUT on protected API or resources.

Explanation:#

RESTful API обычно используют методы HTTP, такие как GET, POST, PUT, DELETE и PATCH, для выполнения операций с ресурсами. Эти методы имеют разное значение и цели, а также могут влиять на API безопасность. Например, использование метода DELETE может привести к окончательному удалению ресурса, а использование метода PUT может перезаписать существующий ресурс.

Чтобы обеспечить безопасность RESTful API, важно убедиться, что включенные методы HTTP необходимы для пользователя или действия. Это означает, что обычные пользователи не должны иметь возможности использовать методы DELETE или PUT для защищты API или ресурсов. Вместо этого эти методы должны быть разрешены только авторизованным пользователям с достаточными привилегиями.

Применяя сторого определенные HTTP-методы для пользователей или действий, RESTful API могут предотвратить несанкционированный доступ и изменение ресурсов, снизить риск утечки данных и повысить общую безопасность приложения.

Remediation:#

Чтобы устранить проблему несанкционированного использования HTTP-методов RESTful, вы должны убедиться, что для каждого ресурса разрешены правильные методы в зависимости от роли пользователя или выполняемого действия. Вот несколько шагов, которые можно предпринять для достижения этой цели:

  • Определите разрешенные методы для каждого ресурса в вашем API и задокументируйте их в документации или спецификации API. Внедрите механизмы управления доступом для принудительного применения разрешенных методов для каждого ресурса в зависимости от роли пользователя или выполняемого действия.
  • Используйте коды состояния HTTP, чтобы указать, когда метод не разрешен для ресурса, например 405 Method Not Allowed или 403 Forbidden.
  • Зарегистрируйте все попытки доступа к ресурсам с помощью запрещенных методов, включая метод запроса, URL-адрес, IP-адрес клиента, а также роль или личность пользователя, чтобы упростить расследование и решение проблем.
  • Регулярно пересматривайте и обновляйте механизмы контроля доступа, чтобы они оставались актуальными и эффективными.
  • Предоставьте обучение по безопасности и ресурсы для всех разработчиков и пользователей приложения, чтобы убедиться, что все понимают важность надлежащего контроля доступа.
  • Рассмотрите возможность внедрения сквозного процесса тестирования безопасности, такого как тестирование на проникновение или аудит безопасности, для проверки безопасности механизмов управления доступом и выявления любых потенциальных уязвимостей.

Вот простой пример исправления кода в Python для этой проблемы безопасности:

from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/data", methods=["GET", "POST"])
def data():
if request.method == "DELETE":
return jsonify({"error": "Method Not Allowed"}), 405
# Handle the request as expected
if request.method == "GET":
# ...
return jsonify({"data": data})
elif request.method == "POST":
# ...
return jsonify({"success": True})
if __name__ == "__main__":
app.run()

В этом примере для реализации веб-приложения используется веб-фреймворк Flask. Входящий запрос проверяется на метод, и если это метод DELETE, возвращается ответ об ошибке с кодом состояния 405 "Метод не разрешен". Ответ об ошибке включает полезную нагрузку JSON, указывающую на ошибку. Если используется метод GET или POST, запрос обрабатывается как обычно. Обратите внимание, что этот код допускает только методы GET и POST, а все остальные методы приведут к ответу об ошибке.

Additional:#

CWE-650: Trusting HTTP Permission Methods on the Server Side