Использование регулярных выражений для обновления аргумента в наборе правил Mod Security Core OWASP

Я только что столкнулся с проблемой с правилом 981173 [msg "Restricted SQL Character Anomaly Detection Alert - Total] для отправки некоторых идентификаторов YouTube в базу данных. Некоторые идентификаторы имеют специальные символы, такие как -, что, я думаю, является причиной появления предупреждения.

Я пытался исключить ключ $_POST video[391][] из правила, где 391 — это идентификатор продукта, поэтому это не ключ исправления. Это может быть video[500][] или что-то подобное.

я пытался

    SecRuleUpdateTargetById 981173 !ARGS:video[*][]

но это не работает. Любая идея о том, как исключить этот динамический ключ $_POST из правила?

  Message: Access denied with code 403 (phase 2). 
  Pattern match "([\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\+\\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){4,}" 
at ARGS_NAMES:video[391][]. [file "/etc/httpd/crs-tecmint/owasp-modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"] 
[line "159"] [id "981173"] [rev "2"] 
[msg "Restricted SQL Character Anomaly Detection Alert - Total # of special characters exceeded"] 
[data "Matched Data: ] found within ARGS_NAMES:video[391][]: video[391][]"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] 
[accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"]

person RedGiant    schedule 25.08.2015    source источник
comment
Я был почти прав. Был ARGS вместо ARGS_NAMES, и вы можете видеть из своей ошибки, что ARG_NAMES — это то, что он помечает. Сейчас исправлено, и я проверил это на ModSecurity v2.9.   -  person Barry Pollard    schedule 08.09.2015


Ответы (1)


Я думаю, что это должно быть:

SecRuleUpdateTargetById 981173 "!ARGS_NAMES:/^video\[.*\]\[\]/"

или если только числовые идентификаторы, то это:

SecRuleUpdateTargetById 981173 "!ARGS_NAMES:/^video\[[0-9]*\]\[\]/"

См. пример регулярного выражения здесь: https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#SecRuleUpdateTargetById

person Barry Pollard    schedule 26.08.2015
comment
Спасибо. У меня есть особый случай, когда имя video[s3][product_id][]. Первый пример "!ARGS_NAMES:/^video\[.*\]\[\]/" охватывает и это? Я попробовал это, и, похоже, это работает и для этого, но я хочу убедиться в этом. - person RedGiant; 08.09.2015
comment
Да, это так, но скорее по счастливой случайности, и это не было моим намерением, потому что я предположил, что у вас две квадратные скобки, а вторая (и последняя) пуста. В этом более свежем примере у вас есть три квадратных скобки. Но на самом деле это работает, поскольку .* соответствует s3][product_id, а остальные подходят. Но как говорится больше по стечению обстоятельств, чем по замыслу! - person Barry Pollard; 08.09.2015
comment
Вы можете выбрать более общий вариант: SecRuleUpdateTargetById 981173 !ARGS_NAMES:/^video[.*]$/, который будет группировать все, начиная с видео[ и заканчивая ] - person Barry Pollard; 08.09.2015
comment
Хм, последний комментарий удалил побеги из квадратных скобок. Убедитесь, что вы поставили \ перед символом [, а также перед символом ], поскольку эти символы имеют особое значение в регулярных выражениях. - person Barry Pollard; 08.09.2015