ModSecurity 给出通用 SQL 注入保护错误

ModSecurity gives Generic SQL injection protection error

我在我的 Cpanel 服务器上遇到了这个错误。它不会在每次更新时发生,只是一些 SQL.

[Sat Mar 11 03:48:18.409435 2017] [:error] [pid 31376:tid 140202228020992] [client 180.253.119.171] ModSecurity: Access denied with code 500 (phase 2). Pattern match "((alter|create|drop)[[:space:]]+(column|database|procedure|table)|delete[[:space:]]+from|update.+set.+=)" at ARGS:description. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "254"] [id "300015"] [rev "1"] [msg "Generic SQL injection protection"] [severity "CRITICAL"] [hostname ""] [uri "/app/marketwatch/edit-listing.php"] [unique_id "WMO50kPhgfkAAHqQRtMAAACP"]

什么通常会导致 SQL 注入错误以及如何消除此错误?

使用这篇文章解决它: https://othermachines.com/blog/drupal-modsec-and-post-wouldnt-save

因此,mod_security 得到了误报。我不知道它以某种方式使用 modsec 规则 ID 300015 而不是像往常一样使用 300016 并陷入错误的安全规则。您可以注意到 [id "300015"] 中的 id。所以我在文件 /usr/local/apache/conf/modsec2/whitelist.conf 中编辑了 modsec 白名单并添加了这个:

# Disable generic SQL injection rules globally
# for Drupal content admin
<LocationMatch /node/[0-9]+/edit> #might vary depending your code
  <IfModule mod_security2.c> # This is the important part
    SecRuleRemoveById 300015
  </IfModule>
</LocationMatch>

<LocationMatch /admin>
  <IfModule mod_security2.c>
    SecRuleRemoveById 300015
  </IfModule>
</LocationMatch>

之后不要忘记重新启动 Apache,这样它就会生效。

更新

不知何故配置位置更改为/etc/apache2/conf.d/modsec2/whitelist.conf