簡體   English   中英

刪除或重復的非單詞字符(如HTML文本區域中的換行符)會導致modsecurity錯誤

[英]Removal or repetitive non-word characters like line breaks in a HTML textarea that cause errors in 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']; 

我的問題是,當客戶輸入多個換行符(回車,回車)時,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規則(也不知道怎么做),我更喜歡在由php腳本處理HTML聯系人表單之前刪除多個換行符(和空格)。 我發現一些使用以下javascript格式的准則:

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

但是我錯過了將“問題”輸入該命令,然后使其可用於php命令$question = $_POST['question'];

有人可以幫忙嗎?

不要嘗試刪除換行符。 那是駭客,無法解決問題。 要解決該問題,您需要對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"

希望這會有所幫助,Ronald

感謝您的回復。 我按照您的建議創建了一個新文件modsecurity_crs_60_customrules.conf,添加了SecRuleRemoveByID 960024,從modsecurity_crs_41_sql_injection_attacks.conf復制了原始的SecRule ARGS“ \\ W {4,}” ............,然后將4更改為6。您的SecRule無效,可能是來自另一個規則集版本。

這適用於兩個連續的換行符。 對於連續三個中斷,我將收到相同的舊錯誤403。因此,我希望訪問者在輸入問題時要注意自己的布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM