The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Уязвимости в устройствах NETGEAR, позволяющие получить досту..."
Отправлено Аноним, 03-Июл-21 17:56 
Сами по себе регулярки вообще прекрасный и замечательный инструмент.

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

1) Является ли грамматика регулярной?

Регулярные выражения применимы только для разбора языков с регулярными грамматиками (Тип 3 по иерархии Хомского). Отсюда следует, например, что нельзя писать регулярки для XML/HTML и прочих контекстно-свободных языков.

Вы можете использовать регулярные выражения и для подмножества языка с КС-грамматик (Тип 2) при том условии, что синтаксис подмножества превратился в регулярный, но на практике это бессмысленно.
Вы должны быть точно уверены что входной текст на КС-языке стал подходящим под разбор регулярным выражением. То есть есть какой-то валидатор, который уже разобрал его и проверил. Закономерный вопрос, а зачем тогда вообще регулярка, если есть нормальный способ... (см п. 2)

2) Есть ли готовый парсер/транслятор?

Написание трансляторов - математически сложная задача. Если вы считаете, что сможете в рамках своей подзадачи написать лучше, чем то что работает для разбора всей грамматики языка, то вы ошибаетесь.

Чаще всего такие проблемы подбора инструмента встречаются при работе с документами. Благо, есть стандарт DOM, описывающий объектную модель документа. Тонна стандартизированных форматов и куча готовых парсеров в самых разных языках. Написание своего формата/парсера - это еще и проблема сопровождения (см п. 3).
Этот вопрос можно перефразировать иначе. Если вы как разработчик-автор формата документа, то почему это не XML?

3) А как потом читать это регулярное выражение?

Вопрос не технический, а гуманитарный. Вы пишете код, который, возможно, останется на долго. С вами работают люди, разработчики, техническая поддержка. А люди в массе своей, чисто статистически не очень сильны в математике, в частности, в информатике (приложение математики к лингвистике).

Есть высокая вероятность того что ваши коллеги или кто-то после вас не смогут справиться с дальнейшим сопровождением кода на ваших регулярных выражениях и всё придется переписывать.

Финально. Регулярные выражения разбирают и находят совпадения. Сами по себе они не проверяют входной поток данных. Еще раз, они ищут совпадения внутри текста, но не проверяют правильность самого текста.

Вообще валидировать что бы то ни было регулярными выражениями, в общем случае плохая идея. Есть частные случаи, когда это допустимо. Например, если над потоком потенциально бесконечных входных данных стоит некая программа, которая разделила его на конечные буферы и мы считаем текст внутри этого буфера, например, строкой, то тогда при правильных ответах на п. 1-3 мы можем написать регулярное выражение, которое проверяет с учетом границ этого буфера ^$.

И это будет поиск полного совпадения с учетом границ. А что сделали разработчики NETGEAR? Стыд...

P.S. Причем даже для валидации есть исключение: валидация адреса e-mail в форме документа.
Проще отправить письмо, чем писать регулярку, которая охватывает современный стандарт.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру