我一直在寻找相当一段时间,最后决定发布关于Mod Security如何从域中锁定用户的问题。
我有一个包含大量遗留网址的大型网站,其中包含' $'和"%"在它们中,这被删除了,但是有遗留的链接将导致一些mod安全规则。
主要问题是一旦触发规则,就会在该页面上按预期返回403错误,但是现在转到域上的任何其他页面都会抛出403错误,以及在浏览器上清除cookie。这当然不是用户友好的,因为许多人不会知道明确的cookie修复,如果他们被锁定,我显然不能轻易地让他们知道,而不想删除导致此问题的所有规则。
网址示例
[代码] 要求:GET /phpBB2/promotions/9927-1st-deposit-bonus-125%25move-up-sun-palace-casin.html 操作描述:使用代码403拒绝访问(阶段2)。 理由:无效的URL编码:REQUEST_URI使用的非十六进制数字。 [/代码]
这是一个 950107:URL编码滥用攻击尝试
Mod安全日志中的许多错误我只看到GET /作为触发器,这显然不是根本原因。
答案 0 :(得分:0)
我的第一个想法是,如果此规则被错误触发,因为这样的用例是(或者是)有效,那么您可能应该禁用此规则:
SecRuleRemoveById 950107
如果您的网页不再存在,那么这可能会返回没有此规则的标准404消息。对于用户而言,这可能比403和更好的用户体验更正确。也意味着您不会在日志中收到针对这些误报的ModSecurity警报。好吧,这可能意味着你错过了这个规则旨在阻止的真正攻击,所以你需要权衡这个风险与挫败一些用户的不利方面。就个人而言,我不认为此规则可以保护您免受重大安全问题的影响,因此会将其禁用。
还需要准确了解问题所在。规则950107检查URL,而不是cookie,因此,虽然我理解它为初始请求触发,但它必须是针对后续阻塞错误触发的不同规则?不确定如何错误地设置cookie以及将来导致问题的这样的值,因此需要更多细节。
可以使用Modancurity和Apache的组合使用Ivan Ristic在他的ModSecurity手册中记录的方法删除cookie,但它有点复杂并涉及几个步骤:
1)创建一个规则,用于检测何时删除cookie并设置环境变量。例如,检查包含单词" value_to_check"的URL。使用这样的规则:
SecRule REQUEST_URI "value_to_check" "id:12345,phase:1,setenv:DISABLE_OUTBOUND_SESSION"
2)使用mod_header获取Apache请求浏览器取消设置该env变量的SESSIONID Cookie:
Header always set Set-Cookie "SESSIONID=; expires 31-Dec-1999 00:00:00 GMT" env=DISABLE_OUTBOUND_SESSION
请注意,这并不能修复任何错误的传入Cookie。根据确切的问题,有相似的修复方法。
我建议你先了解完整的问题,因为可能有更好的解决方案。