Skip to content

Latest commit

 

History

History
68 lines (48 loc) · 5.11 KB

validation.russian.md

File metadata and controls

68 lines (48 loc) · 5.11 KB

Проверяйте входящие схемы JSON

Объяснение в один абзац

Проверка заключается в том, чтобы очень четко определить, какую полезную нагрузку готово принять ваше приложение, и быстро провалиться, если входные данные отклоняются от ожиданий. Это минимизирует область действия атакующего, который больше не может испытывать полезные нагрузки с другой структурой, значениями и длиной. Практически это предотвращает такие атаки, как DDOS (код вряд ли потерпит неудачу, когда ввод правильно определен) и небезопасная десериализация (JSON не содержит сюрпризов). Хотя валидация может быть закодирована или основана на классах и типах (классы TypeScript, ES6), сообществу все больше нравятся схемы на основе JSON, поскольку они позволяют объявлять сложные правила без кодирования и делить ожидания с внешним интерфейсом. JSON-схема - это новый стандарт, который поддерживается многими библиотеками и инструментами npm (например, jsonschema, Postman), joi также очень популярны среди приятного синтаксиса. Как правило, синтаксис JSON не может охватить весь сценарий проверки, и полезный пользовательский код или предварительно запеченные платформы проверки, такие как validator.js. Независимо от выбранного синтаксиса, убедитесь, что проверка запущена как можно раньше - например, с помощью промежуточного программного обеспечения Express, которое проверяет тело запроса до его передачи обработчику маршрута.

Пример - правила проверки JSON-схемы

{
    "$schema": "http://json-schema.org/draft-06/schema#",
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object",
    "properties": {
        "name": {
            "description": "Name of the product",
            "type": "string"
        },
        "price": {
            "type": "number",
            "exclusiveMinimum": 0
        }
    },
    "required": ["id", "name", "price"]
}

Пример - проверка сущности с использованием JSON-схемы

const JSONValidator = require('jsonschema').Validator;

class Product {
  
  validate() {
    const v = new JSONValidator();

    return v.validate(this, schema);
  }

  static get schema() {
    //define JSON-Schema, see example above
  }
}

Пример - использование средства проверки промежуточного программного обеспечения

// The validator is a generic middleware that gets the entity it should validate and takes care to return
// HTTP status 400 (Bad Request) should the body payload validation fail
router.post('/' , **validator(Product.validate)**, async (req, res, next) => {
    // route handling code goes here
});

Что говорят другие блогеры

Из блога Gergely Nemeth:

Проверка правильности ввода данных пользователем является одной из самых важных вещей, которые необходимо предпринять, когда речь заходит о безопасности вашего приложения. Неспособность сделать это правильно может открыть ваше приложение и пользователей для широкого спектра атак, включая внедрение команд, внедрение SQL или хранимые межсайтовые сценарии.

Для проверки ввода пользователя одна из лучших библиотек, которую вы можете выбрать, - это joi. Joi - это язык описания схемы объектов и валидатор для объектов JavaScript.