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:#
Чтобы выполнить это требование, необходимо выполнить следующие шаги:
- Определить JSON schema.
Создать четко определенную JSON схему, которая указывает ожидаемую структуру, типы данных и правила проверки для входных данных JSON.
- Реализовать проверку.
Интегрировать в свое приложение библиотеку или инфраструктуру проверки JSON schema. Эта библиотека должна быть способна анализировать и проверять полученные данные JSON по определенной схеме.
- Проверка входных данных.
Убедиться, что проверка JSON schema выполняется перед принятием и обработкой входных данных. Эта проверка должна выполняться как можно раньше в потоке приложения, в идеале в точке входа, где получены данные JSON.
- Обработка ошибок проверки.
Если входящий JSON не проходит проверку - необходимо обработать ошибки соответствующим образом. Зарегистрировать сведения об ошибке проверки и вернуть клиенту соответствующий ответ об ошибке, указывающий, что ввод недействителен.
- Детальная проверка.
Выполнить всестороннее тестирование, чтобы убедиться, что проверка JSON schema эффективна и точно выявляет любые отклонения от ожидаемой структуры или ограничений данных. Тестировать различные сценарии, включая допустимые входные данные, недопустимые входные данные и пограничные случаи.
Внедряя проверку JSON schema, вы можете предотвратить проблемы безопасности, такие как атаки путем внедрения, повреждение данных и другие непредвиденные действия, возникающие в результате искажения или злонамеренного создания данных JSON:
В этом примере библиотека jsonschema используется для реализации проверки JSON schema, которая ожидает объект с тремя свойствами: «name» (string), «age» (число с минимальным значением 18) и «электронная почта» (строка в формате электронной почты). Свойства «name» и «age» помечены как обязательные.
Функция validate_json_data принимает проанализированные данные JSON в качестве входных данных и использует validate функцию из jsonschema для проверки данных по схеме. Если данные недействительны, возвращается кортеж со значением False и сообщением об ошибке. Если данные допустимы, возвращается кортеж со значением True и пустой строкой. Затем код примера использует эту функцию для проверки данных примера и печатает либо сообщение об ошибке, либо сообщение, указывающее, что данные допустимы.