Skip to main content

V13.2.2 RESTful Web Service

Requirement:#

Verify that JSON schema validation is in place and verified before accepting input.

Explanation:#

JSON (JavaScript Object Notation) это широко используемый формат данных для передачи структурированной информации между клиентом и сервером. Чтобы предотвратить уязвимости в системе, крайне важно проверять входящие данные JSON на соответствие предопределенной схеме, прежде чем принимать и обрабатывать их.

Remediation:#

Чтобы выполнить это требование, необходимо выполнить следующие шаги:

  1. Определить JSON schema.

Создать четко определенную JSON схему, которая указывает ожидаемую структуру, типы данных и правила проверки для входных данных JSON.

  1. Реализовать проверку.

Интегрировать в свое приложение библиотеку или инфраструктуру проверки JSON schema. Эта библиотека должна быть способна анализировать и проверять полученные данные JSON по определенной схеме.

  1. Проверка входных данных.

Убедиться, что проверка JSON schema выполняется перед принятием и обработкой входных данных. Эта проверка должна выполняться как можно раньше в потоке приложения, в идеале в точке входа, где получены данные JSON.

  1. Обработка ошибок проверки.

Если входящий JSON не проходит проверку - необходимо обработать ошибки соответствующим образом. Зарегистрировать сведения об ошибке проверки и вернуть клиенту соответствующий ответ об ошибке, указывающий, что ввод недействителен.

  1. Детальная проверка.

Выполнить всестороннее тестирование, чтобы убедиться, что проверка JSON schema эффективна и точно выявляет любые отклонения от ожидаемой структуры или ограничений данных. Тестировать различные сценарии, включая допустимые входные данные, недопустимые входные данные и пограничные случаи.

Внедряя проверку JSON schema, вы можете предотвратить проблемы безопасности, такие как атаки путем внедрения, повреждение данных и другие непредвиденные действия, возникающие в результате искажения или злонамеренного создания данных JSON:

import json
import jsonschema
from jsonschema import validate
# Define the JSON schema
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "number", "minimum": 18},
"email": {"type": "string", "format": "email"}
},
"required": ["name", "age"]
}
def validate_json_data(json_data):
try:
# Validate the JSON data against the schema
validate(instance=json_data, schema=schema)
print("JSON data is valid.")
# Process the validated JSON data here...
except jsonschema.exceptions.ValidationError as e:
print("JSON data is invalid.")
print("Validation error: ", e)
# Example usage
input_data = '''
{
"name": "John Doe",
"age": 25,
"email": "johndoe@example.com"
}
'''
# Parse the JSON input
json_input = json.loads(input_data)
# Validate the JSON data
validate_json_data(json_input)
 

В этом примере библиотека jsonschema используется для реализации проверки JSON schema,  которая ожидает объект с тремя свойствами: «name» (string), «age» (число с минимальным значением 18) и «электронная почта» (строка в формате электронной почты).  Свойства «name» и «age» помечены как обязательные.

Функция validate_json_data принимает проанализированные данные JSON в качестве входных данных и использует validate функцию из jsonschema для проверки данных по схеме. Если данные недействительны, возвращается кортеж со значением False и сообщением об ошибке. Если данные допустимы, возвращается кортеж со значением True и пустой строкой. Затем код примера использует эту функцию для проверки данных примера и печатает либо сообщение об ошибке, либо сообщение, указывающее, что данные допустимы.

Additional:#

CWE-20: Improper Input Validation