2012-02-15 94 views
1

当试图用一些可能类似于sql查询的文本保存文件时,出现500内部服务器错误。所以ModSecurity的阻止它:通过.htaccess删除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"] 

所以我的文件夹/应用/ 3 /管理/模块/产品创建一个.htaccess文件/

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

但这也不解决问题。我仍然在apache的日志文件中获得一个包含日志条目的500条代码。

任何想法,为什么这可能不工作?

+0

第一件事,为什么你有必要“避免”的呢?这真的是在惹麻烦。 – Oldskool 2012-02-15 14:46:14

+1

该文件处理POST请求以将数据添加到数据库。 POST请求可能包含SQL语句,有没有其他方法可以避免这种情况? – Straseus 2012-02-15 14:49:37

+1

phpMyAdmin必须有相同的问题。了解他们如何绕过它会很有趣 - 编辑:啊,他们没有。请参阅编辑我的回答 – 2012-02-15 15:04:18

回答

2

是否真的是保存的问题是文件?我觉得很难想象,因为这不是阿帕奇在atll的管辖权。不是说查询字符串中的查询造成麻烦吗?

你可能能够规避例如,通过对查询进行base64编码(如果33%的大小增加不测试URL的大小限制),或将查询存储在会话变量中,并只传递指向该变量的唯一随机密钥。

编辑:如果你真的发射以后要执行现场SQL查询 - 不这样做。这正是这个mod_security过滤器存在的原因。

无论哪种方式,phpMyAdmin,一个数据库管理工具,都有同样的问题:它传输实时查询运行。有一些处理phpMyAdmin和mod_security的帖子。 This one建议一些其他过滤器ID禁用。第一个(理想情况下,你只会为一个文件需要接收POST数据做到这一点。)

+0

这是一个由Apache拦截的POST请求。该文件实际上是一个表单处理程序。 – Straseus 2012-02-15 14:49:59

+0

@Straseus我添加了一个编辑。 – 2012-02-15 15:07:02

+0

我如何base64编码?这是一个简单的表单发布到php页面。我想我可以使用JS ajax来做到这一点,但如果可能的话,我宁愿避免。虽然base64编码思想是天才! – Straseus 2012-02-15 15:11:03