在基于 Apache 的 Web 服务器上,启用了 Mod Security。使用我的Codeigniter代码,我正在存储谷歌地图中一个位置的URL。我创建了一个文本框,其中只需要嵌入标签的 url 部分,不需要 iframe 标签,因为它在视图中是硬编码的。
因此,我正在尝试通过代码点火器编码将谷歌地图位置网址保存在mysql数据库中。问题是,如果在服务器上启用了mod安全性,则会出现以下错误:
禁止
您无权访问此服务器上的/UpdateContact。
但是,如果我禁用 mod 安全性,然后尝试再次提交 url,它工作正常。
请告诉我如何在保持我的 Web 服务器上启用 mod 安全性的同时解决此问题。
更新
modsec_audit.log 说:
消息:访问被拒绝,代码为 403(阶段 2)。模式匹配 "(?i:(?:\A|[^\d])0x[a-f\d]{3,}[a-f\d]*)+" at ARGS:gmap.[文件 "/usr/local/apache/modsecurity-owasp-old/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [行"55"][编号 "981260"][修订版"2"][msg "SQL 十六进制编码" 已识别"]....谷歌地图嵌入网址...[标签 "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [标签 "WASCTC/WASC-19"] [标签 "OWASP_TOP_10/A1"] [标签 "OWASP_AppSensor/CIE1"] [标签 "PCI/6.5.2"] Apache-错误: [文件 "apache2_util.c"] [第 271 行] [级别 3] [客户端 %s] ModSecurity: %s%s [uri "%s"]%s 操作: 已截获(阶段 2)
一个简单的解决方案是按其 ID 删除规则编号 981260,但这会使服务器容易受到 SQL 注入攻击。
有什么出路吗?
更新随着我更多地使用它,问题正在增加。
"BIPAP或双水平气道正压通气机是一种 非侵入性机器,用于被诊断患有以下疾病的人 患有睡眠呼吸暂停,可以帮助他们获得更多的空气进入他们的 睡觉时肺",莫德再次阻止它说:"[id "981256"] [msg "检测匹配、合并、立即执行和 有注射"] [数据"匹配数据:在 ARGS 中找到:">
[id "959072"] [修订版"2"] [消息"SQL 注入攻击"] [数据"匹配" 数据:在 ARGS 中找到的 2:product_metadesc:滴水架 通常有一个滚动底座和 2 到 4 个钩子来固定 袋子或瓶装液体。[严重性"严重"][版本。 "OWASP_CRS/2.2.9"] [成熟度"9"] [准确度"8"] [标签 "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [标签 "WASCTC/WASC-19"] [标签 "OWASP_TOP_10/A1"] [标签 "OWASP_AppSensor/CIE1"] [标签 "PCI/6.5.2"]
[ID "973334"] [修订版"2"] [消息"IE XSS 筛选器 - 检测到攻击。 [数据"匹配数据:不想使用西方马桶)\xe2\x80\xa2 盖子 选项 \xe2\x80\xa2 坚固 ( 在 ARGS:descr 中找到: 厕所 转换器有助于降低安装西方马桶的成本 并且还可以节省时间。它可以在任何印度马桶的任何地方使用。 特点:\xe2\x80\xa2可折叠(为其他家庭提供便利) 不想使用西方马桶的成员) \xe2\x80\xa2 盖子选项 \xe2\x80\xa2 坚固(底部有额外的支撑以防止 坠落) \xe2\x80\xa2 防锈(粉末公司..."][版本。 "OWASP_CRS/2.2.9"] [成熟度"8"] [准确度"8"] [标签 "OWASP_CRS/WEB_ATTACK/XSS"] [标签 "WASCTC/WASC-8"] [标签 "WASCTC/WASC-22"] [标签 "OWASP_TOP_10/A2"] [标签 "OWASP_AppSensor/IE1"] [标签 "PCI/6.5.1"]
[id "950001"] [修订版"2"] [消息"SQL 注入攻击"] [数据"匹配" 数据:长度(在ARGS:descr中找到:麦金托什表是一个 由橡胶制成的防水板。它提供了一种有效的方法 躺在 床。它用于医院和家庭环境中的患者/老年人 因任何原因卧床的人。\x0d\x0a特征:\x0d\x0a- 由软橡胶\x0d\x0a- 无乳胶\x0d\x0a- 薄\x0d\x0a- 透气\x0d\x0a- 可水洗 \x0d\x0a- 卷长 (1 仪表)\x0d\x0a"] [严重性"严重"]
[ID "981317"] [修订版"2"] [msg "SQL SELECT 语句异常检测" 警报"] [数据"匹配数据:在 中找到升级不安全的请求 TX:sqli_select_statement_count: 3"] [版本 "OWASP_CRS/2.2.9"] [成熟度 "8"] [精度 "8"] [标签 "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [标签 "WASCTC/WASC-19"] [标签 "OWASP_TOP_10/A1"] [标签 "OWASP_AppSensor/CIE1"] [标签 "PCI/6.5.2"]
模式匹配 "\b(?i:having)\b\s+(\d{1,10}|'[^=]{1,10}')\s*?[=<>]|(?i:\bexecute(\s{1,5}[\w\.$]{1,5}\s{0,3})?\()|\bhaving\b ?(?:\d{1,10}|[\'\"][^=]{1,10}[\'\"]) ?[=<>]+|(?i:\bcreate\s+?table.{0,20}?\()|(?i:\blike\W*?char\W*?\()|(?i:(?:(select(.* ..."在ARGS:fpara。[文件 "/usr/local/apache/modsecurity-owasp-old/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"] ["130"行][编号 "959070"][修订版"2"][味精"SQL注入攻击"][数据"匹配数据:来自中风,帕金森\xe2\x80\x99s疾病或 多发性硬化症(MS).\x0d\x0a骨骼,关节和软组织:这 包括背痛、肩痛、颈部疼痛等疾病,以及 运动损伤\x0d\x0a肺和呼吸:这包括慢性 阻塞性肺疾病(COPD)和囊性纤维化。 和循环:这包括心脏后的康复 攻击。\x0d\x0a\x0d\x0a为了帮助您应对不适,我们提供 你物理治疗是人工智能..."][s
模式匹配 "(?i:(?:[\s()]case\s*?\()|(?:\)\s*?like\s*?\()|(?:haveving\s*?[^\s]+\s*?[^\w\s])|(?:if\s?\([\d\w]\s*?[=<>~]))" 在ARGS:desc。[文件 "/usr/local/apache/modsecurity-owasp-old/base_rules/modsecurity_crs_41_sql_injection_attacks.conf"] ["217"行][编号 "981241"][msg"检测条件 SQL 注入 尝试"] [数据 "匹配数据:有裂缝,在 ARGS:desc:Super Doc Health Care有各种各样的助行器,用于 患者有骨折、瘫痪、膝关节置换、髋关节 替换。[严重性"严重"][标签 "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"]
我已经检查了用户输入,它只是用英语写的关于产品的普通段落。这真的很糟糕,如何摆脱它?
一个简单的解决方案是按其 ID 删除规则编号 981260,但这会使服务器容易受到 SQL 注入攻击。
这不是真的。ModSecurity通过编写一些试图解决攻击的通用规则来工作。像 ModSecurity 这样的 WAF 存在许多误报,必须对其进行调整才能专门针对您的网站工作。是的,运行所有警报将使您的网站最安全,但它也会破坏大多数站点,即便如此,WAF 也不是绝对的安全保证。你不应该害怕调整你的规则。
在这种情况下,您有一个文本框,该文本框采用 URL(很可能具有编码参数),并且该规则旨在阻止 URL 编码的参数,因为它们可能是攻击的迹象。但是,我们知道这是意料之中的,因此这不是攻击的迹象。因此,应为此输入关闭此规则。如果您查看规则定义,它已经忽略了某些众所周知的参数,这些参数包含像您这样的 URL,并且它的检查将失败(如__utm
和_pk_ref
),因此调整它是完全可以接受的(也是预期的!
加载带有规则 981260 的配置文件后,您需要添加以下配置(因为SecRuleUpdateTargetById
更新以前定义的规则,因此必须在读取时定义它正在更新的规则):
SecRuleUpdateTargetById 981260 !ARGS:'gmap'
这将仅为此参数关闭此规则,并允许此规则继续保护其他参数。
老实说,我觉得这条规则没有用,因为很多参数都会得到很多误报,所以我经常使用SecRuleRemoveById 981260
完全关闭它。这是否意味着该网站受到的保护略少?是的,但您应该权衡这种保护是否值得麻烦地支持它和/或从您的网站中删除字段和功能以允许您运行此规则。安全是关于平衡而不是绝对的。
顺便说一句,最新版本的OWASP CRS(v3)一直致力于减少误报的数量,尽管看起来此规则(在v3中已重新编号为942450)基本保持不变:https://github.com/SpiderLabs/owasp-modsecurity-crs/blob/v3.2/dev/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf 因此对这种特殊情况没有帮助,但您应该考虑升级。