2012-02-15 2 views
1

Я получаю 500 внутренних ошибок сервера при попытке сохранить файл с некоторым текстом, который может напоминать SQL-запрос. Так ModSecurity блокирует его:Удаление правила modsecurity через .htaccess

[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"] 

Так я создаю файл .htaccess на папку/приложение/3/админ/модули/продукта/

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

Но это не решает проблему либо. Я все еще получаю код 500 с записями журнала в файле журнала Apache.

Любая идея, почему это может не работать?

+0

Прежде всего, почему у вас есть необходимость «избежать» этого? Это действительно требует неприятностей. – Oldskool

+1

Этот файл обрабатывает запрос POST для добавления данных в базу данных. Запрос POST может содержать инструкции SQL, есть ли другой способ избежать этого? – Straseus

+1

У phpMyAdmin должна быть такая же проблема. Было бы интересно узнать, как они обходят его - Edit: ах, они этого не делают. См. Редактирование на мой ответ –

ответ

2

Действительно ли это с сохранением файла, который является проблемой? Мне трудно представить, потому что это не юрисдикция Apache. Разве это не запрос в строке запроса, которая вызывает проблемы?

Возможно, вы сможете обойти , что, например. путем кодирования запроса base64 (если увеличение размера 33% не проверяет ограничения размера URL-адреса) или сохранение запроса в переменной сеанса и передача только уникального случайного ключа, указывающего на переменную.

Edit: если вы действительно передаче реальных запросов SQL, которые вы позже Execute - не делайте этого. Именно поэтому этот фильтр mod_security существует.

В любом случае, phpMyAdmin, средство управления базами данных, имеет ту же проблему: он передает прямые запросы для запуска. Существует ряд сообщений, посвященных phpMyAdmin и mod_security. This one предлагает несколько других идентификаторов фильтра для отключения. (В идеале вы сделаете это только для одного файла, который должен получать данные POST.)

+0

Это запрос POST, который перехватывается Apache. Файл на самом деле является обработчиком формы. – Straseus

+0

@Straseus Я добавил редактирование. –

+0

Как кодировать base64? Это простая форма, которая отправляется на страницу php. Я думаю, что могу использовать JS ajax для этого, но я бы предпочел, если это возможно, избегать. Хотя идея кодирования base64 гениальна! – Straseus