V1.5.3 Input and Output Architecture
Requirement:#
Verify that input validation is enforced on a trusted service layer. (C5)
Explanation:#
Требование направлено на обеспечение проверки вводимых данных на уровне доверенных сервисов внутри приложения.
1 Input Validation: Валидация вводаимых данных - это процесс проверки и очистки данных, получаемых из внешних источников, таких как пользовательский ввод, на предмет их соответствия ожидаемому формату и требованиям безопасности.
2 Trusted Service Layer: Под уровнем доверенных сервисов понимается компонент или модуль приложения, который считается безопасным и надежным. Как правило, он располагается на стороне сервера и выполняет обработку данных и бизнес-логику.
3 Enforcing Input Validation on the Trusted Service Layer: Это требование подчеркивает, что проверка ввода должна осуществлятся не только пользовательским интерфейсом или клиентской стороной приложения, а также на более глубоком уровне - на стороне сервера в рамках уровня доверенных сервисов.
4 Significance: Обеспечение проверки ввода данных на уровне доверенных сервисов важно по нескольким причинам:
- Defense in Depth: Она обеспечивает дополнительный уровень защиты от вредоносного ввода. Даже если на стороне клиента существует уязвимость, хорошо реализованный уровень доверенных сервисов может перехватить и отклонить вредоносный или ошибочный ввод.
- Consistency: Благодаря централизованной проверке входных данных на стороне сервера, обеспечивается валидация всех поступающих данных из различных клиентских источников по одним и тем же правилам и стандартам проверки.
- Security and Reliability: На уровне доверенных сервисов происходит обработка конфиденциальных данных и критически важной бизнес-логики. Обеспечение того, что на этом уровне обрабатываются только валидные и безопасные данные, повышает уровень безопасности и надежности.
- Protection Against Bypass: Не позволяет злоумышленникам обойти валидацию на стороне клиента и отправить вредоносные данные непосредственно на сервер.
Предположим, у вас есть приложение электронной коммерции с формой регистрации пользователя. Клиентская часть приложения выполняет базовую проверку, например, проверяет пустые поля и правильность формата электронной почты. Однако для выполнения этого требования необходимо реализовать уровень доверенного сервиса, который будет выполнять комплексную проверку ввода, включая проверку на наличие SQL injection, XSS и других уязвимостей. Это гарантирует, что даже если злоумышленник попытается манипулировать проверкой на стороне клиента, сервер отклонит все вредоносные данные.
- Реализуйте функции проверки вводимых данных на уровне доверенных сервисов, которые могут включать скрипты на стороне сервера, API-приложения или контроллеры бэкенда.
- Проверяйте все входящие данные на соответствие заданным правилам безопасности и бизнес-правилам.
- Возвращать клиенту содержательные ответы об ошибках при обнаружении недопустимого ввода.
Remediation:#
Для выполнения требования предусматривающего проверку входных данных на уровне доверенных сервисов внутри приложения, необходимо следовать практике написания безопасного кода и реализовать проверку входных данных на стороне сервера, обеспечив тщательную проверку недоверенных данных перед обработкой.
1 Identify the Trusted Service Layer:
- Определите, какие компоненты или модули в приложении представляют собой уровень доверенных сервисов. Как правило, это компоненты на стороне сервера, отвечающие за обработку входящих данных.
2 Define Input Validation Rules:
- Определите и задокументируйте правила проверки входных данных и требования безопасности для всех источников входных данных, включая пользовательский ввод, запросы API и данные из внешних источников. При этом следует учитывать рекомендации OWASP и лучшие практики.
3 Implement Input Validation Functions:
- Создайте специальные функции или модули проверки ввода в рамках уровня доверенных сервисов для проверки ввода для различных типов данных и источников ввода.
4 Validate All Incoming Data:
- Убедитесь, что все входящие данные, независимо от их источника, подвергаются проверке на достоверность перед началом обработки. Общие проверки включают в себя:
- Проверка на наличие пустых полей.
- Проверка типов данных (например, целые числа, даты).
- Проверка длины и формата данных (например, адресов электронной почты, URL).
- Очистка данных для предотвращения от SQL-injection и cross-site scripting (XSS) и других типов атак.
5 Implement Business Logic Validation:
- В дополнение к базовой проверке ввода следует применять проверку бизнес-логики, чтобы убедиться, что данные соответствуют конкретным требованиям приложения. Например, проверка того, находится ли сумма заказа в допустимом диапазоне.
6 Use Validated Data for Processing:
- Используйте только те данные, которые прошли проверку соответствия бизнес-логике приложения. Отклоняйте или отбрасывайте данные, которые не соответствуют критериям проверки.
7 Error Handling and Reporting:
- Реализуйте понятные и информативные механизмы обработки ошибок и создания отчетов. В случае неудачи при проверке следует выдавать содержательные сообщения об ошибках, которые не раскрывают конфиденциальную и DEBUG информацию, но помогают пользователям понять, почему их данные были отклонены.
8 Regularly Update Validation Rules:
- Поддерживайте правила проверки ввода в актуальном состоянии. По мере появления новых угроз безопасности обновляйте правила проверки для устранения возникающих рисков.
9 Security Testing:
- Проводите тестирование безопасности, включая тестирование на проникновение и анализ кода, для выявления и устранения любых уязвимостей проверки ввода.
10 Logging and Monitoring:
- Внедрите логирование и мониторинг для регистрации сбоев проверки и необычных шаблонов ввода. Это поможет обнаружить потенциальные атаки и отреагировать на них.
11 Review Third-Party Libraries:
- Если ваше приложение использует сторонние библиотеки или фреймворки, убедитесь, что они также выполняют проверку ввода данных. Регулярно обновляйте эти библиотеки до актульных версиий, а также дорабатывайте их, если это необходимо, добавляя в них исправления, до соответствия стандартам безопасности.
Выполнив эти действия, можно эффективно устранить требования и организовать надежный процесс проверки ввода на уровне доверенных сервисов приложения, повысив его безопасность и устойчивость к различным типам атак.
Additional:#
https://owasp-top-10-proactive-controls-2018.readthedocs.io/ru/latest/c5-validate-all-inputs.html
https://www.cgisecurity.com/owasp/OWASPBuildingSecureWebApplicationsAndWebServices-V1.1.pdf
https://owasp.org/www-pdf-archive/Owasp-top-10-proactive-controls-2018-russian.pdf