2

尝试保存包含一些可能类似于 sql 查询的文本的文件时,我收到 500 内部服务器错误。所以 ModSecurity 阻止了它:

[client xxx.xxx.xxx.xxx] ModSecurity: Access denied with code 500 (phase 2). Pattern match "(insert[[:space:]]+into.+values|select.*from.+[a-z|A-Z|0-9]|select.+from|bulk[[:space:]]+insert|union.+select|convert.+\\\\(.*from)" at ARGS:description. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "359"] [id "300016"] [rev "2"] [msg "Generic SQL injection protection"] [severity "CRITICAL"] [hostname "xxxxxxxxxxxxx.net"] [uri "/app/3/admin/modules/product/product_a.php"] [unique_id "TzvCxkPj2kkAAH4WkMwAAAAE"]

所以我在文件夹 /app/3/admin/modules/product/ 上创建了一个 .htaccess 文件

<IfModule mod_security.c>
SecFilterRemove 300015
SecFilterRemove 300016
</IfModule>

但这也不能解决问题。我仍然在 apache 的日志文件中收到带有日志条目的 500 代码。

知道为什么这可能不起作用吗?

4

1 回答 1

2

真的是文件的保存问题吗?我觉得很难想象,因为那根本不是 Apache 的管辖范围。难道不是查询在导致麻烦的查询字符串中吗?

您也许可以通过base64 编码查询(如果33% 的大小增加没有测试URL 的大小限制)或将查询存储在会话变量中并仅传递指向该变量的唯一随机键来规避这种情况。

编辑:如果您真的在传输稍后执行的实时 SQL 查询 - 不要这样做。这正是这个 mod_security 过滤器存在的原因。

无论哪种方式,数据库管理工具 phpMyAdmin 都有同样的问题:它传输实时查询以供运行。有许多帖子涉及 phpMyAdmin 和 mod_security。这个建议禁用许多其他过滤器 ID。(理想情况下,您只对需要接收 POST 数据的一个文件执行此操作。)

于 2012-02-15T14:48:03.383 回答