javascript — удаление или повторяющиеся несловесные символы, такие как разрывы строк в текстовой области HTML, которые вызывают ошибки в modsecurity

Мне нужна небольшая помощь в удалении или повторяющихся несловарных символах, таких как разрывы строк в текстовой области HTML, которые приводят к ошибкам в modsecurity. Я делаю простую HTML-форму с текстовой областью, которую посетители могут заполнить:

  Your question:<br>
<textarea name="question" cols=100 rows=8></textarea>

Далее я использую gen_validatorv4.js чтобы подтвердить ввод

frmvalidator.addValidation("question","maxlen=800", "Max length is 800 characters");

Форма действия при отправке — это скрипт contact-form-handler.php который делает следующее:

$question = $_POST['question'];

Моя проблема заключается в том, что когда клиент вводит несколько разрывов строк (Enter, Return), Modsecurity возвращает ошибку, из-за которой доступ к contact-form-handler.php запрещен:

Message: Access denied with code 403 (phase 2). Pattern match "\\W{4,}" at ARGS:bericht. [file "/usr/share/modsecurity-crs/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "155"] [id "960024"] [rev "2.2.5"] [msg "SQL Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data "\x0d\x0a\x0d\x0a"]
Action: Intercepted (phase 2)
Apache-Handler: application/x-httpd-php
Stopwatch: 1414686989441629 117554 (- - -)
Stopwatch2: 1414686989441629 117554; combined=91683, p1=11515, p2=79432, p3=0, p4=0, p5=731, sr=815, sw=5, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.6.6 (http://www.modsecurity.org/); OWASP_CRS/2.2.5.
Server: Apache/2.2.22 (Debian)

Я попытался с помощью второй (фиктивной) области текста, которая даже не обрабатывается в сценарии php, тем не менее, modsecurity блокирует доступ к сценарию. После удаления нескольких разрывов строк форма успешно обрабатывается и отправляется с помощью msmtp.

Вместо того, чтобы смягчать правила modsecurity (тоже не знаю, как это сделать), я чувствую себя как удаление нескольких разрывов строк (и пробелов) в контактной форме HTML до того, как она будет обработана сценарием php. Я нашел несколько рекомендаций, чтобы сделать это со следующим форматом JavaScript:

txt = txt.replace(/(\r\n|\n|\r)/gm," ");

но я скучаю по знаниям, чтобы ввести «вопрос» в эту команду, а затем сделать его доступным для команды php $question = $_POST['question'];

Кто-нибудь может помочь?

0

Решение

не пытайтесь удалить разрывы строк. Это взломать и не решить проблему. Для решения этой проблемы вам необходимо внести пользовательские изменения в основные правила modsecurity owasp. Если вы не знаете, как это сделать, обратитесь к администратору. Если вы хотите узнать о modsecurity купить https://www.feistyduck.com/books/modsecurity-handbook/

Вот что мы делаем, например, — мы изменяем регулярное выражение с «\ W {4,}» на «\ W {6,}», отключив правило и добавив его снова:

SecRuleRemoveByID 960024
SecRule ARGS "\W{6,}" "phase:2,capture,t:none,t:utf8toUnicode,t:urlDecodeUni,block,id:'960024',rev:'2',ver:'OWASP_CRS/2.2.9',maturity:'9',accuracy:'8',msg:'Meta-Character Anomaly Detection Alert - Repetative Non-Word Characters',logdata:'Matched Data: %{TX.0} found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',setvar:tx.anomaly_score=+%{tx.warning_anomaly_score},setvar:'tx.msg=%{rule.msg}',setvar:tx.%{rule.id}-OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION-%{matched_var_name}=%{tx.0}"

Но, возможно, вы хотите отключить правило только для этого конкретного URL:

SecRule REQUEST_URI "@beginsWith /your/url/to/the/php/script" "phase:1,t:none,pass,id:'5000',nolog,ctl:ruleRemoveById=960024"

Надеюсь это поможет,
Рональд

1

Другие решения

Спасибо за ваш ответ. Я последовал вашему совету, создав новый файл modsecurity_crs_60_customrules.conf, добавил SecRuleRemoveByID 960024, скопировал в него оригинальный файл SecRule ARGS «\ W {4,}» ………… из modsecurity_crs_41_sql_injection_attacks.conf и затем изменил 4 на 6. Ваш SecRule не работал, вероятно, это из другой версии набора правил.

Это работает для двух последовательных разрывов строк. В течение трех перерывов подряд я получу ту же самую старую ошибку 403. Поэтому я надеюсь, что посетители при написании вопроса позаботятся об их макете.

0

По вопросам рекламы [email protected]