По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
SQL расшифровывается как Structured Query Language, или структурированный язык запросов. Команды SQL – это инструкции, которые даются базе данных для выполнения задач, функций и запросов с данными. SQL-командами можно пользоваться для поиска по базе данных и выполнения различных функций: создания и удаления таблиц, добавления данных в таблицы и их редактирования. Ниже приведен список основных команд (их иногда называют операторами), которые необходимо знать при работе с SQL. SELECT и FROM SELECT в запросе определяет, какие столбцы данных отобразить в результатах. Кроме того, в SQL есть возможности отображать данные не из столбца таблицы. В примере ниже показаны 3 столбца, взятые из таблицы студентов Student (через SELECT и FROM) и один вычисляемый столбец. В базе данных хранятся ID (studentID), имя (FirstName) и фамилия (LastName) студента. Мы можем объединить столбцы с именем и фамилией и создать вычисляемое поле с полным именем (FullName). SELECT studentID, FirstName, LastName, FirstName + ' ' + LastName AS FullName FROM student; Вывод: +-----------+-------------------+------------+------------------------+ | studentID | FirstName | LastName | FullName | +-----------+-------------------+------------+------------------------+ | 1 | Monique | Davis | Monique Davis | | 2 | Teri | Gutierrez | Teri Gutierrez | | 3 | Spencer | Pautier | Spencer Pautier | | 4 | Louis | Ramsey | Louis Ramsey | | 5 | Alvin | Greene | Alvin Greene | | 6 | Sophie | Freeman | Sophie Freeman | | 7 | Edgar Frank "Ted" | Codd | Edgar Frank "Ted" Codd | | 8 | Donald D. | Chamberlin | Donald D. Chamberlin | | 9 | Raymond F. | Boyce | Raymond F. Boyce | +-----------+-------------------+------------+------------------------+ 9 rows in set (0.00 sec) CREATE TABLE Название CREATE TABLE говорит само за себя – оператор создает таблицу. Вы можете задать название таблицы и настроить, какие столбцы будут присутствовать в таблице. CREATE TABLE table_name ( column_1 datatype, column_2 datatype, column_3 datatype ); ALTER TABLE ALTER TABLE изменяет структуру таблицы. Вот так можно добавить столбец в базу данных: ALTER TABLE table_name ADD column_name datatype; CHECK CHECK ограничивает диапазон значений, которые можно добавить в столбец. Когда вы настраиваете ограничение CHECK для отдельного столбца, оператор проверяет, что в этом столбце присутствуют строго определенные значения. Если же CHECK настраивается для таблицы, то он может ограничивать значения в отдельных столбцах на основании значений из других столбцов этой строки. В следующем примере при создании таблицы Persons используется ограничение CHECK для столбца «Возраст» (Age). Таким образом проверяется, что в таблицу не попадают лица младше 18 лет. CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, CHECK (Age>=18) ); Следующий синтаксис используется для присвоения названия оператору CHECK и настройки CHECK для нескольких столбцов: CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, City varchar(255), CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes') ); WHERE (AND, OR, IN, BETWEEN и LIKE) Оператор WHERE используется для ограничения количества возвращаемых строк. Сначала, в качестве примере, мы покажем оператор SELECT и его результат без оператора WHERE. Затем добавим оператор WHERE, в котором используются сразу 5 из вышеуказанных квалификаторов. SELECT studentID, FullName, sat_score, rcd_updated FROM student; +-----------+------------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+------------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 3 | Spencer Pautier | 1000 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 7 | Edgar Frank "Ted" Codd | 2400 | 2017-08-16 15:35:33 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+------------------------+-----------+---------------------+ 9 rows in set (0.00 sec) Теперь повторим запрос SELECT, но ограничим возвращаемые строки оператором WHERE. STUDENT studentID, FullName, sat_score, recordUpdated FROM student WHERE (studentID BETWEEN 1 AND 5 OR studentID = 8) AND sat_score NOT IN (1000, 1400); +-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 5 rows in set (0.00 sec) UPDATE Для обновления записи в таблице используется оператор UPDATE. Условием WHERE можно уточнить, какие именно записи вы бы хотели обновить. Вы можете обновлять по одному или нескольким столбцам сразу. Синтаксис выглядит так: UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; В примере ниже обновляется название записи (поле Name) с Id 4: UPDATE Person SET Name = “Elton John” WHERE Id = 4; Помимо этого, можно обновлять столбцы в таблице значениями из других таблиц. Чтобы получить данные из нескольких таблиц, воспользуйтесь оператором JOIN. Синтаксис выглядит так: UPDATE table_name1 SET table_name1.column1 = table_name2.columnA table_name1.column2 = table_name2.columnB FROM table_name1 JOIN table_name2 ON table_name1.ForeignKey = table_name2.Key В примере ниже мы обновляем поле «Менеджер» (Manager) для всех записей: UPDATE Person SET Person.Manager = Department.Manager FROM Person JOIN Department ON Person.DepartmentID = Department.ID GROUP BY GROUP BY позволяет объединять строки и агрегировать данные. Вот так выглядит синтаксис GROUP BY: SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name; HAVING HAVING позволяет сортировать данные, которые собираются через GROUP BY. Таким образом, пользователю показывается лишь ограниченный набор записей. Вот так выглядит синтаксис HAVING: SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name HAVING COUNT(*) > value; AVG() AVG, или среднее, вычисляет среднее значение числового столбца из набора строк, которые возвращает оператор SQL. Вот так выглядит синтаксис: SELECT groupingField, AVG(num_field) FROM table1 GROUP BY groupingField А вот пример этого оператора для таблицы Student: SELECT studentID, FullName, AVG(sat_score) FROM student GROUP BY studentID, FullName; AS AS позволяет переименовать столбец или таблицу с помощью псевдонима. SELECT user_only_num1 AS AgeOfServer, (user_only_num1 - warranty_period) AS NonWarrantyPeriod FROM server_table И вот так будет выглядеть результат. +-------------+------------------------+ | AgeOfServer | NonWarrantyPeriod | +-------------+------------------------+ | 36 | 24 | | 24 | 12 | | 61 | 49 | | 12 | 0 | | 6 | -6 | | 0 | -12 | | 36 | 24 | | 36 | 24 | | 24 | 12 | +-------------+------------------------+ Кроме того, через оператор AS вы можете задать название таблицы – так будет проще обращаться к ней в JOIN. SELECT ord.product, ord.ord_number, ord.price, cust.cust_name, cust.cust_number FROM customer_table AS cust JOIN order_table AS ord ON cust.cust_number = ord.cust_number Результат выглядит так. +-------------+------------+-----------+-----------------+--------------+ | product | ord_number | price | cust_name | cust_number | +-------------+------------+-----------+-----------------+--------------+ | RAM | 12345 | 124 | John Smith | 20 | | CPU | 12346 | 212 | Mia X | 22 | | USB | 12347 | 49 | Elise Beth | 21 | | Cable | 12348 | 0 | Paul Fort | 19 | | Mouse | 12349 | 66 | Nats Back | 15 | | Laptop | 12350 | 612 | Mel S | 36 | | Keyboard| 12351 | 24 | George Z | 95 | | Keyboard| 12352 | 24 | Ally B | 55 | | Air | 12353 | 12 | Maria Trust | 11 | +-------------+------------+-----------+-----------------+--------------+ ORDER BY ORDER BY позволяет сортировать результирующий набор данных по одному или нескольким элементам в разделе SELECT. Ниже дан пример сортировки студентов по имени (FullName) в порядке убывания. Изначально используется стандартная сортировка по возрастанию (ASC), поэтому для сортировки в обратном порядке мы применяем DESC. SELECT studentID, FullName, sat_score FROM student ORDER BY FullName DESC; COUNT COUNT вычисляет количество строк и возвращает результирующее значение в столбце. Ниже приводятся возможные сценарии использования COUNT: Подсчет всех строк в таблице (не требуется Group by) Подсчет общего числа подмножеств данных (в операторе обязательно прописывается Group By) Этот оператор SQL выводит количество всех строк. Кроме того, что вы можете настроить название результирующего столбца COUNT с помощью AS. SELECT count(*) AS studentCount FROM student; DELETE DELETE используется для удаления записи из таблицы. Будьте внимательны! Вы можете удалить несколько записей в таблице, либо сразу все. С помощью условия WHERE вы указываете, какие записи необходимо удалить. Синтаксис выглядит так: DELETE FROM table_name WHERE condition; Вот так выглядит удаление из таблицы Person записи с Id 3: DELETE FROM Person WHERE Id = 3; INNER JOIN JOIN, или внутреннее соединение, выбирает записи, соответствующие значениям в двух таблицах. SELECT * FROM A x JOIN B y ON y.aId = x.Id LEFT JOIN LEFT JOIN возвращает все строки из левой таблицы и соответствующие им строки из правой таблицы. Строки из левой таблицы возвращаются даже при пустых значениях в правой таблице. Если для строк из левой таблицы нет соответствия в правой, то в значениях последней будет стоять null. SELECT * FROM A x LEFT JOIN B y ON y.aId = x.Id RIGHT JOIN RIGHT JOIN возвращает все строки из правой таблицы и соответствующие им строки из левой. В отличие от левого соединения, здесь возвращаются все строки из правой таблицы, даже если им ничего не соответствует в левой. В таком случае, в значениях столбцов из левой таблицы будет стоять null. SELECT * FROM A x RIGHT JOIN B y ON y.aId = x.Id FULL OUTER JOIN FULL OUTER JOIN возвращает все строки, соответствующие условиям в любой из таблиц. Если в левой таблице есть строки, которым ничего не соответствует в правой, то они все равно отобразятся в результирующих значениях. То же самое распространяется и на строки из правой таблицы без соответствующих значений в левой. SELECT Customers.CustomerName, Orders.OrderID FROM Customers FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID ORDER BY Customers.CustomerName INSERT INSERT используется для добавления данных в таблицу. INSERT INTO table_name (column_1, column_2, column_3) VALUES (value_1, 'value_2', value_3); LIKE LIKE используется в связке с WHERE или HAVING (в составе оператора GROUP BY) и ограничивает выбранные строки по элементам, если в столбце содержится определенный шаблон символов. Этот SQL запрос выбирает студентов, чье значение в FullName начинается с «Monique» или заканчивается с «Greene». SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName LIKE 'Monique%' OR FullName LIKE '%Greene'; +-----------+---------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+---------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | +-----------+---------------+-----------+---------------------+ 2 rows in set (0.00 sec) Перед LIKE вы можете добавить NOT, и тогда строки, соответствующие условию, будут исключаться, а не добавляться. Этот SQL исключает записи, у которых в столбце FULL NAME содержится «cer Pau» и «Ted». SELECT studentID, FullName, sat_score, rcd_updated FROM student WHERE FullName NOT LIKE '%cer Pau%' AND FullName NOT LIKE '%"Ted"%'; +-----------+----------------------+-----------+---------------------+ | studentID | FullName | sat_score | rcd_updated | +-----------+----------------------+-----------+---------------------+ | 1 | Monique Davis | 400 | 2017-08-16 15:34:50 | | 2 | Teri Gutierrez | 800 | 2017-08-16 15:34:50 | | 4 | Louis Ramsey | 1200 | 2017-08-16 15:34:50 | | 5 | Alvin Greene | 1200 | 2017-08-16 15:34:50 | | 6 | Sophie Freeman | 1200 | 2017-08-16 15:34:50 | | 8 | Donald D. Chamberlin | 2400 | 2017-08-16 15:35:33 | | 9 | Raymond F. Boyce | 2400 | 2017-08-16 15:35:33 | +-----------+----------------------+-----------+---------------------+ 7 rows in set (0.00 sec)
img
В семиуровневой модели OSI на различных уровнях имеются разные типы адресов. На канальном это MAC-адрес, а на сетевом это IP-адрес. И для того чтобы установить соответствие между этими адресами используется протокол Address Resolution Protocol – ARP. Именно о нем мы поговорим в этой статье. Адресация Адреса 2-го уровня используются для локальных передач между устройствами, которые связаны напрямую. Адреса 3-го уровня используются устройств, которые подключены косвенно в межсетевой среде. Каждая сеть использует адресацию для идентификации и группировки устройств, чтобы передачи прошла успешно. Протокол Ethernet использует MAC-адреса, которые привязаны к сетевой карте. Чтобы устройства могли общаться друг с другом, когда они не находятся в одной сети MAC-адрес должен быть сопоставлен с IP-адресом. Для этого сопоставления используются следующие протоколы: Address Resolution Protocol (ARP) Reverse ARP (RARP) Serial Line ARP (SLARP) Inverse ARP (InARP) Address Resolution Protocol Устройству 3го уровня необходим протокол ARP для сопоставления IP-адреса с MAC-адресом, для отправки IP пакетов. Прежде чем устройство отправит данные на другое устройство, оно заглянет в свой кеш ARP где хранятся все сопоставления IP и MAC адресов, чтобы узнать, есть ли MAC-адрес и соответствующий IP-адрес для устройства, которому идет отправка. Если записи нет, то устройство-источник отправляет широковещательное сообщение каждому устройству в сети чтобы узнать устройству с каким MAC-адресом принадлежит указанный IP-адрес. Все устройства сравнивают IP-адрес с их собственным и только устройство с соответствующим IP-адресом отвечает на отправляющее устройство пакетом, содержащим свой MAC-адрес. Исходное устройство добавляет MAC-адрес устройства назначения в свою таблицу ARP для дальнейшего использования, создает пакет с новыми данными и переходит к передаче. Проще всего работу ARP иллюстрирует эта картинка: Первый компьютер отправляет broadcast сообщение всем в широковещательном домене с запросом “У кого IP-адрес 10.10.10.2? Если у тебя, то сообщи свой MAC-адрес” и на что компьютер с этим адресом сообщает ему свой MAC. Когда устройство назначения находится в удаленной сети, устройства третьего уровня одно за другим, повторяют тот же процесс, за исключением того, что отправляющее устройство отправляет ARP-запрос для MAC-адреса шлюза по умолчанию. После того, как адрес будет получен и шлюз по умолчанию получит пакет, шлюз по умолчанию передает IP-адрес получателя по связанным с ним сетям. Устройство уровня 3 в сети где находится устройство назначения использует ARP для получения MAC-адреса устройства назначения и доставки пакета. Кэширование ARP Поскольку сопоставление IP-адресов с MAC-адресами происходит на каждом хопе в сети для каждой дейтаграммы, отправленной в другую сеть, производительность сети может быть снижена. Чтобы свести к минимуму трансляции и ограничить расточительное использование сетевых ресурсов, было реализовано кэширование протокола ARP. Кэширование ARP - это способ хранения IP-адресов и связанных c ними MAC-адресов данных в памяти в течение определенного периода времени, по мере изучения адресов. Это минимизирует использование ценных сетевых ресурсов для трансляции по одному и тому же адресу каждый раз, когда отправляются данные. Записи кэша должны поддерживаться, потому что информация может устаревать, поэтому очень важно, чтобы записи кэша устанавливались с истечением срока действия. Каждое устройство в сети обновляет свои таблицы по мере передачи адресов. Статические и динамические записи в кеше ARP Существуют записи статического ARP-кэша и записи динамического ARP-кэша. Статические записи настраиваются вручную и сохраняются в таблице кеша на постоянной основе. Статические записи лучше всего подходят для устройств, которым необходимо регулярно общаться с другими устройствами, обычно в одной и той же сети. Динамические записи хранятся в течение определенного периода времени, а затем удаляются. Для статической маршрутизации администратор должен вручную вводить IP-адреса, маски подсети, шлюзы и соответствующие MAC-адреса для каждого интерфейса каждого устройства в таблицу. Статическая маршрутизация обеспечивает больший контроль, но для поддержания таблицы требуется больше работы. Таблица должна обновляться каждый раз, когда маршруты добавляются или изменяются. Динамическая маршрутизация использует протоколы, которые позволяют устройствам в сети обмениваться информацией таблицы маршрутизации друг с другом. Таблица строится и изменяется автоматически. Никакие административные задачи не требуются, если не добавлен лимит времени, поэтому динамическая маршрутизация более эффективна, чем статическая маршрутизация. Устройства, которые не используют ARP Когда сеть делится на два сегмента, мост соединяет сегменты и фильтрует трафик на каждый сегмент на основе MAC-адресов. Мост создает свою собственную таблицу адресов, которая использует только MAC-адреса, в отличие от маршрутизатора, который имеет кэш ARP адресов, который содержит как IP-адреса, так и соответствующие MAC-адреса. Пассивные хабы - это устройства центрального соединения, которые физически соединяют другие устройства в сети. Они отправляют сообщения всем портам на устройства и работают на уровне 1, но не поддерживают таблицу адресов. Коммутаторы уровня 2 определяют, какой порт подключен к устройству, к которому адресовано сообщение, и отправлять сообщение только этому порту, в отличие от хаба, который отправляет сообщение всем его портам. Однако коммутаторы уровня 3 - это маршрутизаторы, которые создают кеш ARP (таблица). Inverse ARP Inverse ARP (InARP), который по умолчанию включен в сетях ATM, строит запись карты ATM и необходим для отправки одноадресных пакетов на сервер (или агент ретрансляции) на другом конце соединения. Обратный ARP поддерживается только для типа инкапсуляции aal5snap. Для многоточечных интерфейсов IP-адрес может быть получен с использованием других типов инкапсуляции, поскольку используются широковещательные пакеты. Reverse ARP Reverse ARP (RARP) - работает так же, как и протокол ARP, за исключением того, что пакет запроса RARP запрашивает IP-адрес вместо MAC-адреса. RARP часто используется бездисковыми рабочими станциями, потому что этот тип устройства не имеет способа хранить IP-адреса для использования при их загрузке. Единственный адрес, который известен - это MAC-адрес, поскольку он выжигается в сетевой карте. Для RARP требуется сервер RARP в том же сегменте сети, что и интерфейс устройства. Proxy ARP Прокси-ARP был реализован для включения устройств, которые разделены на физические сегменты сети, подключенные маршрутизатором в той же IP-сети или подсети для сопоставления адресов IP и MAC. Когда устройства не находятся в одной сети канала передачи данных (2-го уровня), но находятся в одной и той же IP-сети, они пытаются передавать данные друг другу, как если бы они находились в локальной сети. Однако маршрутизатор, который отделяет устройства, не будет отправлять широковещательное сообщение, поскольку маршрутизаторы не передают широковещательные сообщения аппаратного уровня. Поэтому адреса не могут быть сопоставлены. Прокси-сервер ARP включен по умолчанию, поэтому «прокси-маршрутизатор», который находится между локальными сетями, отвечает своим MAC-адресом, как если бы это был маршрутизатор, к которому адресована широковещательная передача. Когда отправляющее устройство получает MAC-адрес прокси-маршрутизатора, он отправляет данные на прокси-маршрутизатор, который по очереди отправляет данные на указанное устройство. Proxy ARP вызывается следующими условиями: IP-адрес назначения не находится в той же физической сети (LAN), на которой получен запрос. Сетевое устройство имеет один или несколько маршрутов к IP-адресу назначения. Все маршруты к IP-адресу назначения проходят через интерфейсы, отличные от тех, на которых получен запрос. Когда proxy ARP отключен, устройство отвечает на запросы ARP, полученные на его интерфейсе, только если IP-адрес назначения совпадает с его IP-адресом или если целевой IP-адрес в ARP-запросе имеет статически настроенный псевдоним ARP. Serial Line Address Resolution Protocol Serial Line ARP (SLARP) используется для последовательных интерфейсов, которые используют инкапсуляцию High Link Level Link Control (HDLC). В дополнение к TFTP-серверу может потребоваться сервер SLARP, промежуточное (промежуточное) устройство и другое устройство, предоставляющее услугу SLARP. Если интерфейс напрямую не подключен к серверу, промежуточное устройство требуется для пересылки запросов сопоставления адреса на сервер. В противном случае требуется напрямую подключенное устройство с сервисом SLARP.
img
  Недавно я просматривал некоторые общедоступные репозитории Google на их GitHub. И я заметил, что у них есть репозиторий для непрерывного фаззинга. Я понятия не имел, что такое фаззинг, не говоря уже о непрерывном.   Что же такое фаззинг? Фаззинг (иногда его называют нечетким тестированием) – это способ автоматического тестирования программного обеспечения. Обычно фаззер вводит в программу большое количество неправильных или случайных входных данных. Таким образом пытаются вызвать сбои, ошибки, утечки памяти и т.д. Обычно фаззинг лучше всего работает с программами, которые принимают входные данные, такие как веб-сайты, которые могут запрашивать ваше имя или возраст. Можно попробовать вводить самые различные строки, чтобы попытаться вызвать какие-то проблемы, например, что-нибудь вроде такого: «Power?????????????????? ? ?h ? ??» (это когда-то вызвало аварийный сбой iOS), «??????h??e???????? ???????N??e??z?????p??????e????r????????d??????i??????a?????n?? ?????h??i??v?????-?????m???i????n???? ????????????f ????????c?????????a?????????s?.?? ?Z????????a?????l?????g????????o??.?», «?» или «undefined». В целом идея фаззинга заключается в том, чтобы попытаться найти пограничные случаи в кодовой базе. Его используют для того, чтобы убедиться, что синтаксический анализ данных, их прием, сохранение и чтение не вызывают ошибок.  Это довольно полноценный тест, поскольку вы можете протестировать весь процесс хранения, например, пробела нулевой длины (U+200B в Юникоде) на своем сайте, чтобы проверить, возникнут ли какие-то проблемы.  Некоторые пытаются внедрить код в поля ввода (это часть фаззинга, которая называется «внедрение кода»), например,  в качестве имени.  Злоумышленники не заинтересованы в том, чтобы вы тестировали нестандартный ввод, так как вы можете обнаружить ошибки, которые нарушают работу приложения, а они могли бы использовать их для кражи данных или повторного сбоя в вашем приложении/сервере.  На GitHub есть список под названием «Big List of Naughty Strings» («Большой список сомнительных строк»). Это список строк, которые с большей долей вероятности вызовут проблемы.  Вы можете взглянуть на некоторые в файлах .json и .txt и почитать некоторые комментарии, чтобы понять, почему именно эти строки вызывают проблемы.  Например, некоторые строки написаны вверх ногами «u?op?p?sd?». Есть строки, которые могут быть помечены как ненормативная лексика или как неприемлемые, но на самом деле они к этому не имеют никакого отношения (это называется проблемой Скантропа). И даже есть такие строки, которые могут раскрыть системные файлы, если они вдруг будут проанализированы плохо настроенным синтаксическим анализатором XML.  Кто использует фаззинг? Как я уже говорил, фаззинг используется в процессе тестирования программного обеспечения для поиска ошибок в ваших программах. Но он также применяется в кибербезопасности и при взломах. Что касается применения в кибербезопасности, то здесь хакеры пытаются пересечь границу доверия. Граница доверия – это место в компьютерных системах, где данные из доверенного источника передаются из одной области в другую.  В качестве примера давайте представим, что вы получаете имя пользователя в клиентской части, убеждаетесь, что оно является допустимым, а затем передаете его на серверную часть. Ваша граница доверия – это воображаемая линия, по которой данные передаются от клиента к серверу.   Если ваша серверная часть просто «доверяет» данным и не проверяет их (поскольку клиент уже проверил их!), то это может стать проблемой. В случае, если хакеры смогут пройти проверку клиента, они станут поставщиками доверенных входных данных и смогут попытаться вставить туда вредоносные строки.  Именно в этой ситуации фаззинг может посодействовать выборочной проверке, чтобы убедиться, что вы можете выявлять эти проблемы. Допустим, кто-то должен был фаззить Google Chrome. Один из способов это сделать – запустить браузер в инструменте отладки для того, чтобы отслеживать команды, которые выполняет Chrome, и профилировать его управление памятью. Позже хакеры направляют программу Chrome, за которой они наблюдают, на один из своих серверов. Их серверы создают миллионы различных веб-страниц, которые Chrome будет загружать. Все эти веб-страницы немного отличаются с точки зрения JS, CSS и HTML. Это нужно для того, чтобы попытаться сломать Chrome, который профилируют хакеры.  Эти хакеры могут осмысленно запускать эти автоматические тесты в течение нескольких месяцев, собирать огромный список журналов Chrome (сбои, любые переполнения памяти и т.д.) и пытаться выяснить, что вызвало сбой.  Просто заставить Chrome «рухнуть» не является их конечной целью. Как только эти хакеры узнают, какие входные данные вызывают сбои, они также могут выяснить, почему эти данные вызывают сбои, и проанализировать, могут ли они использовать эти эксплойты, чтобы исполнить свой зловещий план, или получить доступ к чему-то, к чему доступа у них не должно быть.  На сегодняшний день Google фаззит свои приложения на 30 000 виртуальных машинах! Таким образом, вы вряд ли добьетесь какого-либо успеха, поскольку они очень сильно постарались.  OSS-Fuzz от Google обнаружил более 25 000 ошибок в коде Google Chrome и примерно 22 000 ошибок в других общедоступных кодовых базах, которые используют OSS-Fuzz. Итак, вернемся к основному заголовку. Кто использует фаззинг? Держу пари, что почти все компании, которые должны защищать свои цифровые активы или информацию, либо наймут тестировщиков для фаззинга своих продуктов, либо будут делать это самостоятельно.  Заключение Я надеюсь, что эта статья помогла вам понять, что такое фаззинг и для чего он применяется.  
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59