Как отключить mod_security
с помощью файла .htaccess
на сервере Apache?
Я использую WordPress на своем личном домене и размещаю пост, содержание которого содержит некоторый блок кода, и, как сказал мой хостинг-провайдер, mod_security
выдает ошибку, а мой IP попал в брандмауэр из-за mod_security
.
Поэтому я хочу отключить mod_security
с помощью файла .htaccess
.
Это можно сделать, но, скорее всего, ваш хостер внедрил mod_security
не просто так. Убедитесь, что они одобрили отключение этой функции для вашего собственного сайта.
Тем не менее, это должно сработать;
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
На некоторых сервера и веб-узлов, он'можно отключить ModSecurity через `.htaccess файл, но только в полном объеме – вы можете'т отключать отдельные правила.
А не отключить его для всего сайта, это'лучше ограничить это определенным URL-адресам. Вы можете уточнить заявление, какие URL-адреса, чтобы соответствовать через регулярное выражение в в <если>
ниже...
### DISABLE mod_security firewall
### Some rules are currently too strict and are blocking legitimate users
### We only disable it for URLs that contain the regex below
### The regex below should be placed between "m#" and "#"
### (this syntax is required when the string contains forward slashes)
<IfModule mod_security.c>
<If "%{REQUEST_URI} =~ m#/admin/#">
SecFilterEngine Off
SecFilterScanPOST Off
</If>
</IfModule>
Просто чтобы обновить этот вопрос для mod_security 2.7.0+ - они отключили возможность смягчения modsec через htaccess, если вы не компилируете его с флагом --enable-htaccess-config
. Большинство хостеров не используют эту опцию компилятора, поскольку она позволяет слишком слабую безопасность. Вместо этого, vhosts в httpd.conf является вашим основным вариантом для контроля modsec.
Даже если вы скомпилируете modsec с htaccess mitigation, вам доступно меньше директив. Например, там больше нельзя использовать SecRuleEngine
. Вот список, который можно использовать по умолчанию в htaccess, если это разрешено (имейте в виду, что хост может дополнительно ограничить этот список с помощью AllowOverride
):
- SecAction
- SecRule
- SecRuleRemoveByMsg
- SecRuleRemoveByTag
- SecRuleRemoveById
- SecRuleUpdateActionById
- SecRuleUpdateTargetById
- SecRuleUpdateTargetByTag
- SecRuleUpdateTargetByMsg
Подробнее на официальной вики modsec
Дополнительное замечание для пользователей 2.x: IfModule
теперь должен искать mod_security2.c
вместо более старого mod_security.c
.
Если вышеуказанное решение не работает, попробуйте следующее:
<IfModule mod_security.c>
SecRuleEngine Off
SecFilterInheritance Off
SecFilterEngine Off
SecFilterScanPOST Off
SecRuleRemoveById 300015 3000016 3000017
</IfModule>
В .файл htaccess в корне сайта редактирование каталога следующую строку:
в
<ifmodule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</ifmodule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
в
Просто держать в <ifmodule mod_security.в C> правила mod_security как SecFilterEngine </ifmodule> и <IfModule mod_rewrite, с.в C> частей друг от друга. Его произведения для сервера Apache
С некоторыми веб-узлами, включая системы Namecheap, это's не можно отключить с помощью ModSecurity .реврайт
. Единственный вариант, это обратиться в техподдержку и попросить их, чтобы изменить конфигурацию.
Для тех, кто просто ищете, чтобы пропустить страницу об ошибке для отображения контента на виртуальном хостинге. Возможно, вы захотите попробовать и использовать редирект в .файл htaccess. Если говорить об ошибках 406, на UnoEuro это не'т, кажется, работает просто выключая безопасности. Так что я использовал это:
ErrorDocument 406 /
Потом вы всегда сможете изменить статус ошибки с помощью PHP. Но знайте, что в моем случае это означает, что я открываю дверь к SQL-инъекции, как я обход в WAF. Так что вы должны убедиться, что вы либо иметь собственные меры безопасности или обеспечения безопасности как можно скорее снова.