На заметку Защита на дурака против хакеров, ддосеров и бруттеров

Тема в разделе "Защита от DDOS своими силами", создана пользователем X-Shar, 18 фев 2016.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.807
    Симпатии:
    426
    Пол:
    Мужской
    Репа:
    +959 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Всем привет !

    Предлагаю вариант защиты от XSS, защиты от SQL injection, а также от ботов с кривыми загаловками, при помощи .htaccess:

    Код:
    #Блокировка XSS
        RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
        RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    Код:
    # Block MySQL injections, RFI, base64, etc.
    
        RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
        RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
        RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
        RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
        RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
        RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
        RewriteCond %{QUERY_STRING} http\: [NC,OR]
        RewriteCond %{QUERY_STRING} https\: [NC,OR]
        RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
        RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
        RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
        RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
        RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
        RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
        RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
        RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
        RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
        RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
        RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
        RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
        RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
        RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
        RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
        RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
        RewriteRule ^(.*)$ - [F,L]
    А также фильтрация URL на служебные символы:
    Код:
    RewriteCond %{QUERY_STRING} (<|>|'|\+|%2B|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
    Если вас атакуют боты, с кривыми (или пустыми загаловками), можно их также запретить, лучше сделать это в nginx и отдавать 444 ошибку (Пустая страница и разрыв коннекта):
    Код:
    if ($http_user_agent = "") { return 444; }
    if ($http_user_agent = "-") { return 444; }
     
    • Информативный пост Информативный пост x 2
    • Мне нравится Мне нравится x 1
  2. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.807
    Симпатии:
    426
    Пол:
    Мужской
    Репа:
    +959 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Пусть будет здесь, небезопасные функции php, которые можно отключить:

    • exec - вызов внешней программы
    • ini_get - получает значение опции конфигурации
    • ini_get_all - получает все опции конфигурации
    • parse_ini_file - разбирает файл конфигурации
    • passthru - вызов внешней программы и вывод "сырых" результата на дисплей
    • php_uname - возвращает информацию об ОС, на которой php был построен
    • popen - открывает файловый указатель процесса
    • proc_open - выполняет команду и открывает файловый указатель для ввода/вывода
    • shell_exec - выполняет команду в оболочке/shell и возвращает полный вывод в виде строки
    • show_source - вывод исходного текста текущей веб страницы
    • system - вызов внешней программы и вывод результата на дисплей
    Также стоит подумать над отключением таких функций:
    • diskfreespace - псевдоним функции disk_free_space
    • disk_free_space - получить размер доступного пространства в каталоге
    • disk_total_space - возвращает общий размер диска
    • eval - вычисляет строку, заданную в code_str, как код PHP (eval ( string code_str))
    • fileperms - получить информацию о правах на файл
    • fopen - открывает файл или URL
    • opendir - возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir()
    • phpinfo - выводит всю информацию об php, Ос
    • phpversion - выводит версию php
    • posix_getpwuid - возвращает информацию о пользователе по его user id
    • posix_getgrgid - возвращает информацию о группе по её group id
    • posix_uname - получает системное имя, возвращает хэш строк с информацией о системе.
    Но некоторые сайты/плагины требуют эти функции, я у себя пока отключил эти:

    Для отключения в php.ini, нужно добавить:

    disable_functions = exec,parse_ini_file,passthru,php_uname,popen,proc_open,shell_exec,show_source,system,opendir,eval

    Пока тестирую, если что отвалится, отпишу здесь...;)
     
    • Информативный пост Информативный пост x 1
  3. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.807
    Симпатии:
    426
    Пол:
    Мужской
    Репа:
    +959 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    Как защитить WordPress при помощи .htaccess:

    Возможные угрозы:

    ● SQL-injection — добавление к запросу SQL-кода, обеспечивающего доступ к базе данных (так можно получить информацию, содержащуюся в таблицах, изменить или удалить ее);
    ● RFI (Remote File Inclusion), в нашем случае — PHP-инъекция, становится возможной в том случае, если не осуществляется проверка входных параметров;
    ● XSS (межсайтовый скриптинг) — его суть заключается во внедрении потенциально опасных команд непосредственно в страницу сайта. Код выполняется на компьютере пользователя при открытии соответствующего веб-документа;
    ● Подмена глобальных переменных — позволяет изменять php-сценарии на стороне пользователя;
    ● Атаки с использованием base64 — обратимое кодирование, позволяющее передавать данные между любыми устройствами, а в случае с хакерами — обходить многие фильтры;
    ● iFrame-инъекции — атаки с использованием фреймов.


    Представленный набор правил htaccess позволяет отбиваться от перечисленных выше напастей. Принцип его действия основан на сканировании передаваемых значений в строке запроса. При обнаружении подозрительной последовательности символов, сервер вернет ошибку 403 — доступ запрещен:

    Код:
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
    RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
    RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
    RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
    RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
    RewriteCond %{QUERY_STRING} http\: [NC,OR]
    RewriteCond %{QUERY_STRING} https\: [NC,OR]
    RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
    RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
    RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
    RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
    RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
    RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
    RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
    RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
    RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
    RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
    RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
    RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
    RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
    RewriteRule ^(.*)$ - [F,L]
    </IfModule>
    Предотвращаем использование эксплоита timthumb
    Скрипт timthumb.php является составной частью многих шаблонов WordPress. Он необходим для изменения размера изображений, но также может быть использован злоумышленниками в качестве средства загрузки на веб-ресурс произвольного php-кода. Предотвратить это поможет следующее правило:
    Код:
    <IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
    RewriteRule . - [S=1]
    </IfModule>
    Также хорошо помогают плагины Secure Wordpress и Protected wp-login, в комплексе с указанными правками, если ничего не посыпется, то будет не плохая защита !like itlike itlike it
     
    • Мне нравится Мне нравится x 2
    • Информативный пост Информативный пост x 1

Поделиться этой страницей