пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Формы широко используются в веб-приложениях: одни для сбора данных о пользователях и их электронных адресах, другие — для выполнения онлайн-транзакций. Например, веб-формы могут использоваться для подачи заявки на автокредит или для заказа пиццы. Важно, чтобы собранные данные были очищены, правильно отформатированы и свободны от вредоносного кода. Этот процесс, называемый валидацией формы, необходим для проверки правильности ввода, соответствия допустимым диапазонам (например, для дат) и предотвращения SQL-инъекций. Некорректные или отсутствующие данные могут привести к ошибкам в API. Какие существуют типы валидации форм? Валидация форм может выполняться как на стороне клиента, так и на стороне сервера. Валидация на стороне клиента осуществляется с использованием атрибутов HTML5 и JavaScript на стороне клиента. Например, вы могли заметить, что в некоторых формах, как только вы вводите недействительный адрес электронной почты, форма сразу же выдает ошибку «Пожалуйста, введите действительный адрес электронной почты». Этот тип валидации обычно выполняется с помощью JavaScript на стороне клиента. В других случаях, когда вы заполняете форму и вводите данные, такие как номер кредитной карты, может появиться экран загрузки, а затем сообщение об ошибке «Этот кредитный card недействителен». В этом случае форма вызывает серверный код и возвращает ошибку валидации после выполнения дополнительных проверок кредитной карты. Эта валидация, при которой происходит вызов серверного кода, называется валидацией на стороне сервера. Какие данные должны быть проверены? Валидация формы необходима каждый раз, когда вы принимаете данные от пользователя. Это может включать: Проверку формата полей, таких как адрес электронной почты, номер телефона, почтовый индекс, имя, пароль. Проверку обязательных полей. Проверку типа данных, например, строка или число для полей, таких как номер социального страхования. Убедитесь, что введенное значение является допустимым, например, страна, дата и так далее. Как настроить валидацию на стороне клиента? Валидация на стороне клиента может быть выполнена двумя способами: Использование функциональности HTML5 Использование JavaScript Как настроить валидацию с помощью функциональности HTML5? HTML5 предоставляет набор атрибутов для помощи валидации данных. Вот некоторые распространенные случаи валидации: Сделать поля обязательными с помощью атрибута required. Ограничить длину данных: minlength, maxlength для текстовых данных min и max для максимального значения числового типа Ограничение типа данных с использованием атрибута type: Указание шаблонов данных с помощью атрибута pattern: Определяет регулярное выражение, которому должны соответствовать введенные данные Когда значение ввода соответствует вышеуказанной валидации HTML5, ему присваивается псевдокласс :valid, и :invalid, если это не так. Рассмотрим пример: Здесь у нас есть два обязательных поля — Имя и Фамилия. Если вы пропустите одно из этих полей и нажмете «Отправить», вы получите сообщение «Пожалуйста, заполните это поле». Это валидация с использованием встроенных возможностей HTML5. Как настроить валидацию с помощью JavaScript? При реализации валидации формы нужно учитывать несколько моментов: Что считается "действительными" данными? Это поможет определить формат, длину, обязательные поля и тип данных. Что происходит при вводе недействительных данных? Это поможет определить пользовательский опыт валидации — показывать ли сообщение об ошибке прямо в форме или в верхней части формы, насколько подробно должно быть сообщение об ошибке, следует ли отправлять форму все равно, нужно ли отслеживать формат данных и так далее. Валидацию на стороне клиента можно выполнять двумя способами: Встраиваемая валидация с помощью JavaScript HTML5 Constraint Validation API Встраиваемая валидация с помощью JavaScript: В этом примере мы проверяем обязательные поля с помощью JavaScript. Если обязательное поле отсутствует, мы используем CSS для отображения сообщения об ошибке. Атрибуты Aria изменяются соответствующим образом для обозначения ошибки. Используя CSS для показа/скрытия ошибки, мы уменьшаем количество манипуляций с DOM. Сообщение об ошибке предоставляется в контексте, что делает пользовательский опыт интуитивным. HTML5 Constraint Validation API: Атрибуты required и pattern HTML могут помочь в выполнении базовой валидации. Но если вам нужна более сложная валидация или подробные сообщения об ошибках, вы можете использовать Constraint Validation API. Некоторые методы, предоставляемые этим API: checkValidity setCustomValidity reportValidity Следующие свойства полезны: validity validationMessage willValidate В этом примере мы будем использовать методы HTML5, такие как required и length, совместно с Constraint Validation API для предоставления подробных сообщений об ошибках. Не забывайте о валидации на стороне сервера. Валидация на стороне клиента — это не единственная проверка, которую следует выполнить. Необходимо также проверять данные, полученные от клиента, на стороне сервера, чтобы убедиться, что данные соответствуют ожидаемым. Также можно использовать валидацию на стороне сервера для выполнения бизнес-логики, которая не должна находиться на стороне клиента. Лучшие практики валидации форм: Всегда выполняйте валидацию на стороне сервера, поскольку злоумышленники могут обойти валидацию на стороне клиента. Предоставляйте подробные сообщения об ошибках в контексте поля, которое вызвало ошибку. Предоставляйте пример того, каким должно быть значение данных в случае сообщения об ошибке, например, «Email не соответствует формату - test@example.com». Избегайте использования страниц ошибок, которые требуют перенаправления. Это создает плохой пользовательский опыт и заставляет пользователя возвращаться на предыдущую страницу для исправления формы, теряя контекст. Всегда отмечайте обязательные поля.
img
В наших материалах по Cisco, посвященных конфигурации сетевых устройств мы часто встречаемся со стандартными листами (списками) контроля доступа. А теперь поговорим о расширенных. Расширенные листы могут также фильтровать трафик по следующим параметрам: IP-адреса - фильтрация на основе IP-адреса источника и адреса назначения; Порты - фильтрация на основе порта источника / порта назначения; Тип протокола TCP/IP - протоколы TCP, UDP, IP и так далее; Что делать? Для начала необходимо создать лист. Сделаем это с помощью команды: access list NUMBER permit|deny IP_PROTOCOL SOURCE_ADDRESS WILDCARD_MASK [PROTOCOL_INFORMATION] DESTINATION_ADDRESS WILDCARD_MASK PROTOCOL_INFORMATION Синтаксис команды следующий: NUMBER - номер листа; PERMIT/DENY - разрешение или запрет трафика; SOURCE/DESTINATION ADDRESS - адреса источника и назначения; WILDCARD_MASK - обратная маска; PROTOCOL_INFORMATION - название или номер протокола TCP, UDP, IP и так далее; Кстати, для расчета wildcard (обратной) маски, вы можете воспользоваться нашим калькулятором подсетей: Калькулятор подсетей Следующим шагом необходимо применить наш свежесозданный лист на интерфейс и его направление (на вход или выход): ip access-group NUMBER out Параметры in и out определяют направление, на котором будет применен лист контроля доступа Для нумерации расширенных листов контроля доступа необходимо использовать следующую нумерацию: со 100 до 199 и с 2000 до 2699 Пример настройки (сценарий №1) В топологии указанной ниже, нам нужно разрешить пользователям из подсети 10.0.0.0/24 доступ к серверу S2 (адрес 192.168.0.1), но не к серверу S1 (адрес 172.16.0.1/24). Для начала, напишем ACL и разрешим доступ к серверу S2. Сделаем это мы следующей командой: access-list 100 permit ip 10.0.0.0 0.0.0.255 192.168.0.1 0.0.0.0 Данная команда разрешает весь трафик из подсети 10.0.0.0 на хост 192.168.1.0. Затем, запретим доступ к серверу S1: access-list 100 deny ip 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0 Наконец, применим данные листы контроля доступа на интерфейсе R1: int fa0/0 ip access-group 100 in Пример настройки (сценарий №2) Приведем иной пример использования расширенных листов контроля доступа: У нас снова есть сеть 10.0.0.0/24 и сервер S1, который слушает порт 80. Нам нужно разрешить пользователям доступ к веб-ресурсам на данном сервере, но также необходимо запретить какой-либо другой доступ, к примеру Telnet. Для начала, нам нужно разрешить трафик из пользовательской подсети к веб-серверу на порту 80, что выполняется командой access-list 100 permit tcp 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0 eq 80 Используя ключевое слово TCP, мы можем фильтровать пакеты по портам источника и назначения. В примере выше, мы разрешили путь трафику из подсети 10.0.0.0 на хост 172.16.0.1 на порт 80 (веб-порт). Теперь нужно запретить Telnet трафик из подсети 10.0.0.0 в подсеть 172.16.0.1. Для этого нужен еще один аксес-лист, на этот раз с запрещающим выражением: access-list 100 deny tcp 10.0.0.0 0.0.0.255 172.16.0.1 0.0.0.0 eq 23 Далее, применим его на интерфейс с помощью следующих команд: int fa0/0 ip access-group 100 in Как мы уже описывали в предыдущей статье, в конце каждого листа всегда есть всезапрещающее правило. После применения первого правила, весь остальной трафик ходить не будет.
img
Многим приложениям нужно обмениваться данными между клиентом и сервером. Долгое время эталонным форматом данных для обмена информацией между двумя объектами считался XML. Затем, в начале 2000-х, появился альтернативный формат JSON. В данной статье вы узнаете все о JSON. Мы рассмотрим, что это, и как им пользоваться, а также разберем ряд популярных заблуждений. Что такое JSON? JSON (JavaScript Object Notation, нотация объектов JavaScript) - это текстовый формат обмена данными. Он представлен наборами пар "ключ-значение", причем ключ - это всегда строка, а значение может задаваться одним из следующих типов: число; строка; логическое значение; массив; объект; нулевое значение null. Несколько важных правил: В формате данных JSON ключи прописываются в двойных кавычках. Ключ и значение разделяются двоеточием (:). Может быть несколько пар "ключ-значение". Каждая пара отделяется запятой (,). В данных JSON недопустимы комментарии (// или /* */). (Но при желании это ограничение можно обойти) Ниже приведен пример простых данных в JSON: { "name": "Alex C", "age": 2, "city": "Houston" } Допустимые данные в JSON возможны в 2 разных форматах: Набор пар «ключ-значение» в фигурных скобках {...}. Это показано в примере выше. Упорядоченные списки пар «ключ-значение», разделенных запятой (,) и заключенных в квадратные скобки [...]. См. пример ниже: [ { "name": "Alex C", "age": 2, "city": "Houston" }, { "name": "John G", "age": 40, "city": "Washington" }, { "name": "Bala T", "age": 22, "city": "Bangalore" } ] Предположим, вы уже писали что-то на JavaScript. Тогда у вы можете ошибочно предположить, что формат JSON и объекты JavaScript (и массивы объектов) очень похожи. Но это не так. Чуть позже мы подробно об этом поговорим. Структура JSON разработана на основе синтаксиса объектов JavaScript, и это единственное, что объединяет JSON и объекты JavaScript. Формат JSON не зависит от языка программирования. Мы можем использовать JSON в Python, Java, PHP и многих других языках. Примеры формата данных JSON Сохранять данные JSON можно в файле с расширением .json. Давайте создадим файл employee.json с атрибутами сотрудника. Они представлены в виде ключей и значений. { "name": "Aleix Melon", "id": "E00245", "role": ["Dev", "DBA"], "age": 23, "doj": "11-12-2019", "married": false, "address": { "street": "32, Laham St.", "city": "Innsbruck", "country": "Austria" }, "referred-by": "E0012" } В примере выше присутствуют следующие атрибуты сотрудника: name – имя сотрудника. Значение в строковом формате (String). Оно указано в двойных кавычках. id – уникальный идентификатор сотрудника. Опять же, в строковом формате. role – роли, которые сотрудник выполняет в организации. Таких ролей может быть несколько, поэтому лучше перечислять эти данные в формате массива (Array). age – текущий возраст сотрудника. Это числовое значение (Number). doj – дата найма сотрудника. Поскольку это дата, ее добавляют в двойных кавычках и обрабатывают как строку. married – замужем/женат ли сотрудник? Ответом может быть да/нет (то есть true или false), так что это логический формат (Boolean). address – адрес сотрудника. Может состоять из нескольких частей: улица, город, страна, индекс и т.д. Такое поле лучше представлять в виде объекта (Object с парами «ключ-значение»). referred-by – идентификатор сотрудника, который порекомендовал этого человека на должность в организацию. Если сотрудник пришел по рекомендации, то атрибут имеет значение. В остальных случаях поле остается пустым, т.е. null. Теперь давайте создадим набор данных по сотрудникам в формате JSON. Если мы хотим добавить несколько записей о разных сотрудниках, то необходимо прописать их в квадратных скобках [...]. [ { "name": "Aleix Melon", "id": "E00245", "role": ["Dev", "DBA"], "age": 23, "doj": "11-12-2019", "married": false, "address": { "street": "32, Laham St.", "city": "Innsbruck", "country": "Austria" }, "referred-by": "E0012" }, { "name": "Bob Washington", "id": "E01245", "role": ["HR"], "age": 43, "doj": "10-06-2010", "married": true, "address": { "street": "45, Abraham Lane.", "city": "Washington", "country": "USA" }, "referred-by": null } ] Обратите внимание на значение атрибута referred-by для сотрудника Боба Вашингтона (Bob Washington). Оно пустое. То есть никто из сотрудников не давал ему рекомендаций. Как использовать данные JSON в качестве значения строки Мы узнали, как форматировать данные внутри файла JSON. Еще можно использовать данные JSON в качестве строковых значений и присваивать их переменной. Поскольку JSON считается текстовым форматом, в большинстве языков программирования его можно обрабатывать как строку. Давайте рассмотрим пример, как это делается JavaScript. Вы можете добавить данные JSON в одну строку. Перечисление делается через одинарные кавычки '...'. const user = '{"name": "Alex C", "age": 2, "city": "Houston"}'; Если вы хотите сохранить форматирование, то данные JSON лучше создавать с помощью шаблонных литералов (template literals). const user = `{ "name": "Alex C", "age": 2, "city": "Houston" }`; Кроме того, это очень удобное решение, если нужно создать данные JSON с динамическими значениями. const age = 2; const user = `{ "name": "Alex C", "age": ${age}, "city": "Houston" }`; console.log(user); // Output { "name": "Alex C", "age": 2, "city": "Houston" } Объекты JavaScript и JSON – это НЕ одно и то же Формат данных JSON создавался на базе объектной структуры JavaScript. Но все сходства на этом заканчиваются. Объекты в JavaScript: у объектов JavaScript могут быть методы, а у JSON – нет; ключи можно добавлять без кавычек; разрешены комментарии; отдельные сущности Как преобразовать JSON в объект JavaScript и наоборот В JavaScript есть 2 встроенных метода по преобразованию данных JSON в объекты JavaScript и наоборот. Как преобразовать данные JSON в объект JavaScript Для преобразования данных JSON в объект JavaScript используется метод JSON.parse(). Он проводит синтаксический разбор (парсинг) допустимой строки JSON в объект JavaScript. const userJSONData = `{ "name": "Alex C", "age": 2, "city": "Houston" }`; const userObj = JSON.parse(userJSONData); console.log(userObj); Вывод: Как преобразовать объект JavaScript в данные JSON Для преобразования объекта JavaScript в данные JSON используется метод JSON.stringify(). const userObj = { name: 'Alex C', age: 2, city: 'Houston' } const userJSONData = JSON.stringify(userObj); console.log(userJSONData); Вывод: Должно быть, вы обратили внимание на слово JSON, которое используется для вызова методов parse() и stringify(). Это встроенный объект JavaScript, который, хоть и называется JSON (хотя с тем же успехом он мог бы называться JSONUtil), но не имеет никакого отношения к формату JSON. Так что, пожалуйста, помните об этом. Как обрабатывать ошибки "Unexpected token u in JSON at position 1" и другие? При обработке JSON могут возникать ошибки. Это нормально. Например, при разборе данных JSON в объект JavaScript вдруг появляется следующее сообщение: Если возникает такая ошибка, обязательно проверьте корректность ваших данных в JSON. Чаще всего причина синтаксического сбоя кроется в небольшой ошибке, которую вы случайно сделали в исходных данных JSON. Проверить правильность данных и форматов JSON можно с помощью JSON Linter.
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59