2016-07-08 2 views
0

У меня установлен Apache 2.4 и mod_security 2.9.1, и он работает с некоторыми очень базовыми правилами.mod_security: правило, разрешающее запросы POST без тела запроса

Я пытаюсь сделать запрос POST, который содержит некоторую информацию заголовка, но не имеет ничего в теле запроса (запрос является конечной точкой API, которая защищена mod_security, и эта конечная точка требует POST без орган запроса). POST, который не требует тела, действителен в следующих случаях: Are PUT and POST requests required/expected to have a request body?

mod_security блокирует запрос, потому что кажется, что он не может разобрать/форматировать тело (вероятно, потому, что он не существует).

Как изменить правила, чтобы разрешить POST без тела, но в противном случае действовать как нормальное, если тело существует.

Конкретное правило, в настоящее время срабатывает является:

SecRule REQBODY_ERROR "[email protected] 0" \ 
"id:'200002', phase:2,t:none,log,deny,status:415,msg:'Failed to parse request body.',logdata:'%{reqbody_error_msg}',severity:2" 

Ошибка:

[Fri Jul 08 10:32:32.9] [:error] [pid 7697] [client 10.0.2.2:57442] [client 10.0.2.2] ModSecurity: JSON parser error: parse error: premature EOF\n [hostname "example.com"] [uri "/api/v1/logout"] [unique_id "V377qH8AAQEAAB4RU6cAAAAD"] 

[Fri Jul 08 10:32:32.901555 2016] [:error] [pid 7697] [client 10.0.2.2:57442] [client 10.0.2.2] ModSecurity: Access denied with code 415 (phase 2). Match of "eq 0" against "REQBODY_ERROR" required. [file "/etc/modsecurity/modsecurity.conf"] [line "61"] [id "200002"] [msg "Failed to parse request body."] [data "JSON parser error: parse error: premature EOF\\x0a"] [severity "CRITICAL"] [hostname "example.com"] [uri "/api/v1/logout"] [unique_id "V377qH8AAQEAAB4RU6cAAAAD"] 

Или, если я просто не послать заголовок Content-Type HTTP, чтобы получить mod_security для разбора (хотя я бы предпочел, чтобы все запросы POST всегда были определены Content-Type)?

Я использую полный текст modsecurity.conf (который является базовым примером с двумя дополнительными правилами фильтрации типов контента).

+0

Если у вас нет контента, у вас нет типа содержимого. –

+0

Привет, но для безопасности это не лучшая практика, чтобы гарантировать, что запросы POST всегда имеют Content-Type? Или это сценарий «иметь только контент-тип, если у вас есть тело»? – pnairn

+0

mod_security выполняет проверку содержимого. Для действительного HTTP требуется тело сообщения, если оно не является 100, 204 или 304 HT Response. https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html –

ответ

2

Вы можете отключить доступ тела для запроса с нулевой длиной тела:

SecRule REQUEST_BODY_LENGTH "@eq 0" "id:12345,phase:1,nolog,ctl:requestBodyAccess=off" 

Или, если вы хотите сделать это на определенный URL затем использовать прикован правило так:

SecRule REQUEST_URI /my/weird/api "phase:1,id:12346,nolog,chain" 
    SecRule REQUEST_BODY_LENGTH "@eq 0" "ctl:requestBodyAccess=off" 
+0

Это очень хакерское решение, которое фактически не решает проблему. –

+0

Отправка запросов POST без тела - вещь очень куртка! –

+1

Обновленный ответ, чтобы иметь лучшие решения. Позднее с этим? –

Смежные вопросы