TL; DR:
Как отладить попадание в правила mod-security , чтобы идентифицировать часть запроса, запускающую правило?.
ситуация
У меня есть сайт, работающий в среде с modsecurity и Free OW ASP ModSecurity Core Rule Set (CRS) , идея которого мне действительно нравится. Я потратил много времени на установку тех же плагинов и конфигурации, запущенных на моем компьютере разработчика, и у меня возникла проблема с отладкой. c. что дает html, которое либо отображается в браузере, либо отправляется по электронной почте.
Проблема в том, что у меня все еще есть данные, которые запускают разные правила OW ASP, что приводит к 403, что является в лучшем случае раздражает и не очень удобен для пользователя.
Попытка отладки
Например, я получаю такой результат в журнале:
[Sat Jul 11 20:12:47.827894 2020] [:error] [pid 9504:tid 2352] [client 127.0.0.1:53355] [client 127.0.0.1] ModSecurity: Warning. Pattern match "(?i)(?:\\\\W|^)(?:javascript:(?:[\\\\s\\\\S]+[=\\\\\\\\(\\\\[\\\\.<]|[\\\\s\\\\S]*?(?:\\\\bname\\\\b|\\\\[ux]\\\\d))|data:(?:(?:[a-z]\\\\w+\\\\/\\\\w[\\\\w+-]+\\\\w)?[;,]|[\\\\s\\\\S]*?;[\\\\s\\\\S]*?\\\\b(?:base64|charset=)|[\\\\s\\\\S]*?,[\\\\s\\\\S]*?<[\\\\s\\\\S]*?\\\\w[\\\\s\\\\S]*?>))|@\\\\W*?i\\\\W*?m\\\\W*?p\\\\W*? ..." at ARGS:sluttekst. [file "C:/udvikling/xampp/apache/conf/extra/owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf"] [line "259"] [id "941170"] [msg "NoScript XSS InjectionChecker: Attribute Injection"] [data "Matched Data: \\x22data:image/png; found within ARGS:tekst: <p><span style=\\x22font-size: 14px;\\x22><span style=\\x22font-family: verdana,geneva,sans-serif;\\x22>her er der noget tekst som er fremtrædende. Områder obliver våde.Privat. Kvalitet bør værdsættes, hvis du vil.<br />\\x0d\\x0a<br />\\..."] [hostname "devpc.local"] [uri "/z.php"] [unique_id "XwoBH4TwpS3bcEzonWuZAwAAji0"], referer: https://depc.local/z.php
Поскольку шаблон усеченный, я нашел файл конфигурации в локальной apache config ( REQUEST-941-APPLICATION-ATTACK-XSS.conf ) и скопировал строку, которая была сопоставлена
<p><span style=\\x22font-size: 14px;\\x22><span style=\\x22font-family: verdana,geneva,sans-serif;\\x22>her er der noget tekst som er fremtrædende. Områder obliver våde.Privat. Kvalitet bør værdsættes, hvis du vil.<br />\\x0d\\x0a<br />\\...
... вместе с тем, что я предполагаю, это шаблон регулярного выражения ...
(?i)(?:\W|^)(?:javascript:(?:[\s\S]+[=\\\(\[\.<]|[\s\S]*?(?:\bname\b|\\[ux]\d))|data:(?:(?:[a-z]\w+\/\w[\w+-]+\w)?[;,]|[\s\S]*?;[\s\S]*?\b(?:base64|charset=)|[\s\S]*?,[\s\S]*?<[\s\S]*?\w[\s\S]*?>))|@\W*?i\W*?m\W*?p\W*?o\W*?r\W*?t\W*?(?:\/\*[\s\S]*?)?(?:[\"']|\W*?u\W*?r\W*?l[\s\S]*?\()|\W*?-\W*?m\W*?o\W*?z\W*?-\W*?b\W*?i\W*?n\W*?d\W*?i\W*?n\W*?g[\s\S]*?:[\s\S]*?\W*?u\W*?r\W*?l[\s\S]*?\("
... в такой инструмент, как regexr.com, чтобы увидеть фактическое совпадение. Но не тут-то было.
Неоптимальный обходной путь
Я уже взял один такой редактор и преобразовал отправителя в кодировку base64 перед отправкой на сервер, а затем base64decoding
это снова ... Я не хочу делать это для всех редакторов, которые у меня есть ...
Куда отсюда?
Я бы предпочел отфильтровать весь недопустимый код ( Я уже выяснил, что скандинавский символ å
htmlencoded в å
перехватывается плагином REQUEST-932-APPLICATION-ATTACK-RCE, поэтому мне нужно будет убедиться, что они отправляются как символы UTF-8)