2014-10-30 79 views
0

我需要一些幫助,以刪除或重複的非單詞字符,如在HTML文本區中導致modsecurity錯誤的換行符。我正在做一個textarea的簡單的HTML表單,遊客可以填寫:刪除或重複的非單詞字符,如在HTML文本區中導致modsecurity錯誤的換行符

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的返回訪問到C錯誤防塵帶外形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腳本處理的第二(虛擬)textarea的嘗試,然而ModSecurity的阻止訪問該腳本。當多個換行符被刪除時,表單被成功處理並通過msmtp發送。

而不是減輕modsecurity規則(不知道該怎麼做)我覺得更像是在PHP腳本處理之前刪除HTML聯繫表單中的多個換行符(和空格)。我發現了一些準則,採取以下JavaScript格式可以這樣做:

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

,但我錯過了知識養活「問題」這個命令,然後使其可用於PHP的命令$question = $_POST['question'];

任何人的幫助?

回答

1

不要嘗試刪除換行符。這是一個黑客,並沒有解決問題。要解決這個問題,您需要對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}" 

但也許要禁用規則只爲這一特定網址:

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

希望這有助於 羅納德

+0

在這裏需要注意的一件事是,我需要編輯規則一個新的ID - modsec不會讓我重新添加一個具有相同ID的規則。 – Shorn 2016-08-09 01:43:06

0

謝謝 期待你的答覆。我遵循你的建議,創建一個新的文件modsecurity_crs_60_customrules.conf,添加SecRuleRemoveByID 960024,將原來的SecRule ARGS「\ W {4,}」............從modsecurity_crs_41_sql_injection_attacks.conf複製到它然後將4改爲6.您的SecRule不起作用,可能來自另一個規則集版本。

這適用於兩個連續的換行符。對於連續三次休息,我會得到相同的舊錯誤403,所以我希望訪問者在輸入問題時能夠自己處理佈局。

相關問題