删除或重复的非单词字符,如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'];
我的问题是,当客户输入多个换行符(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规则(也不知道如何做到这一点),我更喜欢在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"
希望这能有所帮助,罗纳德
感谢您的回复。我听从了你的建议,创建了一个新文件modsecurity_crs_6o_customrules.conf,添加了SecRuleRemoveByID 960024,复制了原始SecRule ARGS"''W{4,}"。。。。。。。。。。。。从modsecuritycrs_41_sql_injection_attacks.conf转换为它,然后将4改为6。您的SecRule不起作用,可能是来自另一个规则集版本。
这适用于两个连续的换行符。对于连续三次中断,我将得到相同的旧错误403。所以我希望访问者在输入问题时注意他们的布局。
- 如何在映射数组中添加换行符
- JQuery:向多个匹配结果添加换行符的最简单方法
- 在文本区域中使用jQuery.text()保持换行符
- javascript替换换行符和特殊字符
- 换行符拆分返回“”;未定义”;
- 尊重“; 〃;从HTML显示中的API响应返回的换行符(和特殊字符)
- javascript是否有一个选项可以使句点与任何字符匹配,包括换行符
- 如何在指定字符后添加换行符
- 用换行符替换字符
- 删除或重复的非单词字符,如HTML文本区域中的换行符,这些字符会导致modsecurity中的错误
- 显示文本中的x个字符,当单击href时,用换行符显示其余字符
- 如何在每80个字符后插入换行符
- 特殊字符前的换行符
- 计算文本区域中的字符和换行符
- JSON:处理textArea中的换行符(和其他无效的JSON字符)
- 如何从PHP字符串中删除所有换行符和转义字符?
- Angular.js textarea字符计数,排除空格和换行符计数
- CSV文件中的 字符不被视为换行符
- 如何在javascript中每三个字符添加一个换行符
- 找到一个字符并插入换行符