Skip to main content

V13.2.5 RESTful Web Service

Requirement:#

Verify that REST services explicitly check the incoming Content-Type to be the expected one, such as application/xml or application/json.

Explanation:#

Требование безопасности в стандарте ASVS требует проверки того, что службы REST явно проверяют входящий Content-Type на соответствие ожидаемому, например, application/xml или application/json. Это требование помогает предотвратить такие атаки, как подмена типа содержимого, которые могут быть использованы для обхода средств контроля безопасности и выполнения вредоносного кода.

Remediation:#

Вот пример того, как можно проверить Content-Type входящих запросов в REST-сервисе с помощью Python Flask:

Проверка типов входящих файлов в REST-сервисе
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/myresource', methods=['POST'])
def my_resource():
content_type = request.headers.get('Content-Type')
if content_type != 'application/json':
return jsonify({'error': 'Invalid content type'}), 400
# Process the request
return jsonify({'message': 'Request processed successfully'}), 200

В этом примере оператор request.headers.get('Content-Type') используется для получения Content-Type входящего запроса. Если значением заголовка Content-Type не является application/json, служба REST возвращает ответ об ошибке. В противном случае служба обрабатывает запрос и возвращает ответ об успехе.

Additional:#

CWE-436: Interpretation Conflict

Content-Type Header