Представим, что у нас есть множество данных в формате JSON, например:
{
"kind": "person"
"name": "John Doe",
"age": 28,
"occupation": "programmer",
"sex": "male"
},
{
"kind": "dog",
"breed": "collie"
"name": "Fido",
"age": 3
}
Или на входе - запросы к сайту (URI, длина запроса, тип контента, поля формы и их значения).
И у нас очень-очень много таких записей. Задача - находить ошибочные, странные, подозрительные записи. (Как в той шутке, когда мальчика зовут
Джон'; DROP TABLE persons --
)
Человеку легко понять их структуру и понять, какие из них выбиваются из шаблона. Так же легко человеческое понимание реализовать в виде простого кода для проверок, что если kind==person, то age будет числом и от 0 до 120, а name - имеет разумную длинну (не 1 мегабайт), символьный, а sex либо male либо female.
А каким способом мы можем автоматически определить шаблоны для этого? Например, который поднимет тревогу если имя - "/etc/passwd" или слишком длинное или содержит инъекцию или например поле "occupation" встретилось для собаки. (но не потому что мы знаем атаки и настораживаемся от слов /etc/passwd, .env или SELECT , а потому что мы в обучающем сете не видели раньше имен из одного слова и со слешами)
Либо простой нейросеткой (собственной) можно ли это как-то сделать? Как?
Может какими-то более простыми методами?
Нельзя ли вообще каким-то байесовым фильтром, как раньше почту от спама фильтровали?
Или просто обычным алгоритмом это можно сделать, без магии ИИ?
Мне кажется, задача относительно простая, просто у меня нет опыта в Machine Learning. В какую сторону копать?