Работает ли ModSecurity 2.7.1 с ASP.NET MVC 3?
Я пытаюсь заставить ModSecurity 2.7.1 работать с веб-сайтом ASP.NET MVC 3. Установка прошла без ошибок и, глядя на журнал событий, ModSecurity запускается успешно. Я использую modsecurity.conf-recommended
файл для установки основных правил.
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я размещаю некоторые данные формы, они не доходят до действия контроллера (или связывателя модели).
я имею SecRuleEngine
установлен в DetectionOnly
,
я имею SecRequestBodyAccess
установлен в On
,
С этими настройками тело POST никогда не достигает действия контроллера. Если я установлю SecRequestBodyAccess
в Off
это работает, так что это определенно связано с тем, как ModSecurity
пересылает данные тела. ModSecurity
debug показывает следующее (мне кажется, что все прошло):
Second phase starting (dcfg 94b750).
Input filter: Reading request body.
Adding request argument (BODY): name "[0].IsSelected", value "on"
Adding request argument (BODY): name "[0].Quantity", value "1"
Adding request argument (BODY): name "[0].VariantSku", value "047861"
Adding request argument (BODY): name "[1].Quantity", value "0"
Adding request argument (BODY): name "[1].VariantSku", value "047862"
Input filter: Completed receiving request body (length 115).
Starting phase REQUEST_BODY.
Recipe: Invoking rule 94c620; [file "*********************"] [line "54"] [id "200001"].
Rule 94c620: SecRule "REQBODY_ERROR" "!@eq 0" "phase:2,auditlog,id:200001,t:none,log,deny,status:400,msg:'Failed to parse request body.',logdata:%{reqbody_error_msg},severity:2"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against REQBODY_ERROR.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 5549c38; [file "*********************"] [line "75"] [id "200002"].
Rule 5549c38: SecRule "MULTIPART_STRICT_ERROR" "!@eq 0" "phase:2,auditlog,id:200002,t:none,log,deny,status:44,msg:'Multipart request body failed strict validation: PE %{REQBODY_PROCESSOR_ERROR}, BQ %{MULTIPART_BOUNDARY_QUOTED}, BW %{MULTIPART_BOUNDARY_WHITESPACE}, DB %{MULTIPART_DATA_BEFORE}, DA %{MULTIPART_DATA_AFTER}, HF %{MULTIPART_HEADER_FOLDING}, LF %{MULTIPART_LF_LINE}, SM %{MULTIPART_MISSING_SEMICOLON}, IQ %{MULTIPART_INVALID_QUOTING}, IP %{MULTIPART_INVALID_PART}, IH %{MULTIPART_INVALID_HEADER_FOLDING}, FL %{MULTIPART_FILE_LIMIT_EXCEEDED}'"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against MULTIPART_STRICT_ERROR.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 554bd70; [file "********************"] [line "80"] [id "200003"].
Rule 554bd70: SecRule "MULTIPART_UNMATCHED_BOUNDARY" "!@eq 0" "phase:2,auditlog,id:200003,t:none,log,deny,status:44,msg:'Multipart parser detected a possible unmatched boundary.'"
Transformation completed in 0 usec.
Executing operator "!eq" with param "0" against MULTIPART_UNMATCHED_BOUNDARY.
Operator completed in 0 usec.
Rule returned 0.
Recipe: Invoking rule 554cbe0; [file "*********************************"] [line "94"] [id "200004"].
Rule 554cbe0: SecRule "TX:/^MSC_/" "!@streq 0" "phase:2,log,auditlog,id:200004,t:none,deny,msg:'ModSecurity internal error flagged: %{MATCHED_VAR_NAME}'"
Rule returned 0.
Hook insert_filter: Adding input forwarding filter (r 5541fc0).
Hook insert_filter: Adding output filter (r 5541fc0).
Initialising logging.
Starting phase LOGGING.
Recording persistent data took 0 microseconds.
Audit log: Ignoring a non-relevant request.
Я не вижу ничего необычного в Fiddler. Я использую ViewModel
в параметрах моего действия. Данные не связаны, если SecRequestBodyAccess
установлен в On
, Я даже регистрирую все Request.Form.Keys и значения через log4net, но также не получаю никаких значений там.
Я начинаю задаваться вопросом, если ModSecurity
на самом деле работает с ASP.NET MVC или если есть конфликт с ModSecurity
Модуль http и связующее устройство модели начинают работу.
У кого-нибудь есть предложения или кто-нибудь может подтвердить, что у них есть ModSecurity, работающий с веб-сайтом ASP.NET MVC?
2 ответа
Я отправил сообщение об ошибке для этой проблемы, и теперь оно исправлено в modsecurity 2.7.2. https://www.modsecurity.org/tracker/browse/MODSEC-371
Итак, я несколько лет опаздываю на вечеринку, но сейчас работаю над похожими проблемами и подумала, что поделюсь тем, что я нашла.
Это не проблема MVC. Это может быть проблема IIS, хотя, похоже, что-то подобное влияет на NGINX (на основании этого: https://github.com/SpiderLabs/ModSecurity/issues/664) И, тем не менее, эта проблема по-прежнему возникает в версии ModSecurity, которая получает устанавливается с помощью утилиты установщика веб-платформы и версии, автоматически доступной в Azure AppService, поэтому, если есть исправление, оно, вероятно, не будет широко распространено.
На основании ( https://github.com/SpiderLabs/ModSecurity/issues/562) я настраивал:
SecStreamInBodyInspection On
... который пропускает тела POST, хотя я не нашел четкого указания, почему. Это немного тревожно, потому что я также не уверен, какие могут быть недостатки, если таковые имеются, но магия, кажется, работает.
Интересно, что правила OWASP CRS для ModSecurity устанавливают SecRequestBodyInspection, но не SecStreamInBodyInspection, что наводит меня на мысль, что эта ошибка затрагивает не все хосты, но это определенно ловушка для пользователей IIS.
НТН