2.14.1.17. Ochrona przed atakami hakerskimi na WordPress

Uwaga!

Przed podjęciem jakichkolwiek działań Stwórz kopie zapasowe witryn i baz danych.
  1. Regularnie aktualizuj WordPress, motywy i wtyczki. Obecnie udział CMS WordPress przekracza 30% wszystkich stron internetowych na świecie. Ze względu na swoją powszechność WordPress jest popularnym celem hakerów. Ponieważ WordPress jest systemem CMS o otwartym kodzie źródłowym, każdy może uzyskać dostęp do kodu, aby się go uczyć i ulepszać. Oznacza to jednak również, że hakerzy mogą je badać i znajdować sposoby włamywania się na strony internetowe.
    Za każdym razem, gdy wykryta zostanie luka, programiści WordPress ciężko pracują, aby wydać aktualizację, która rozwiązuje problem. Jeśli nie korzystasz z najnowszej wersji WordPressa, korzystasz z oprogramowania ze znanymi lukami w zabezpieczeniach.
  2. Usuń wszystkie nieużywane motywy z katalogu wp-content/themes i nieużywane wtyczki z katalogu wp-content/plugins... Przechowywanie darmowych motywów i wtyczek znacznie zwiększa prawdopodobieństwo zhakowania witryny. Jeśli motyw lub wtyczka są nieaktywne, nadal umożliwiają otwieranie złośliwych skryptów z katalogu wp-content/motywy/nazwa_motywy lub wp-treść/wtyczki/nazwa_podłącz.
  3. Более половины бесплатных тем WordPress заражены lub уязвимы. Если вы скачиваете премиум-motywy с ресурса, где они размещены бесплатно, с большой вероятностью они содержат вредоносный код lub спам-ссылки.
  4. Wyłącz wyświetlanie wersji Wordpress. Atakujący nie będą znali wersji, co oznacza, że nie będą też znali luk w zabezpieczeniach. Aby to zrobić, otwórz plik wp-content/motywy/nazwa_motywy/functions.php i dodaj następujący kod po pierwszym wierszu:
    function remove_wordpress_version_number() {
        return '';
    }
    add_filter('the_generator', 'remove_wordpress_version_number');
    function remove_version_from_scripts( $src ) {
       if ( strpos( $src, '?ver=' ) )
           $src = remove_query_arg( 'ver', $src );
       return $src;
    }
    add_filter( 'style_loader_src', 'remove_version_from_scripts');
    add_filter( 'script_loader_src', 'remove_version_from_scripts');
  5. Ruszajsię plik konfiguracyjny wp-config.php do katalogu powyżej bieżącego. Plik wp-config.php zawiera podstawowe ustawienia Twojej witryny i jest to najważniejszy plik w katalog główny witryny. W obecnej architekturze WordPress plik konfiguracyjny jest sprawdzany z najwyższym priorytetem. W ten sposób, nawet jeśli jest przechowywany w jednym folderze powyżej katalogu głównego, WordPress nadal będzie mógł go zobaczyć. Musisz przenieść podany plik z katalogu /dom/imię_hosting_Nazwakonta_strona/www/ do katalogu /dom/imię_hosting_Nazwakonta_Strona/. Uwaga! To zalecenie ma zastosowanie tylko wtedy, gdy używasz pojedynczej subdomeny.
  6. Zmień prefiks bazy danych. Można to zrobić za pomocą phpMyAdmin:
    1. Wykonaj zapytanie SQL SHOW TABLES:
    2. Skopiuj wynikową listę wszystkich tabel w bazie danych i utwórz podobne zapytanie dla każdej tabeli:
      RENAME TABLE `wp_comments` TO `wpnew1_comments`;
    3. Uruchom wygenerowane zapytania:
    4. Aby upewnić się, że prefiks to wp_ nie jest już używany, uruchom zapytanie:
      SELECT * FROM `wpnew1_options` WHERE `option_name` LIKE '%wp_%'
    5. Ręcznie zmień prefiks na nowy za pomocą przycisku «Edytować»:
    6. Zrób to samo po uruchomieniu następującego zapytania:
      SELECT * FROM `wpnew1_usermeta` WHERE `meta_key` LIKE '%wp_%'
    7. Ostatnim krokiem jest otwarcie pliku konfiguracyjnego wp-config.php i zmień prefiks na nowy:
  7. Zmień domyślny login administratora admin:
    1. Zalogujsię w phpMyAdmin wybierz bazę i znajdź tabelę prefiks_users:
    2. Otwórz go i znajdź w kolumnie user_login Zalogujsie admin... Kliknij «Edytować», впишите новый Zalogujsie администратора и сохраните изменения:
    3. Zmień adres URL panelu administracyjnego. Aby to zrobić, użyj wtyczki Protect Your Admin:
      1. Установите плагин, откройте меню podłącz, замените URL и нажмите «Save»:
      2. W rozdziale «Ustawienia → Permalinki» zainstaluj opcję «Nazwa rekordu»:Teraz panel administracyjny będzie dostępny pod adresem takim jak example.com/wpmyadmin.
  8. Odmów dostępu do pliku xmlrpc.php... Aby to zrobić, w katalogu głównym witryny w pliku .htaccess dodaj jedną z opcji ograniczeń:
    # Przekieruj na adres lokalny. Dziennik będzie zawierał kod odpowiedzi 301.
    RewriteRule ^xmlrpc\.php$ "http\:\/\/127\.0\.0\.1\/" [R=301,L]
     
    # Odmów dostępu do pliku. Dziennik będzie zawierał kod odpowiedzi 403.
    RewriteRule ^xmlrpc.php$ - [F,L]
  9. Wyłącz wykonywanie plików PHP w katalogu pobierania. Jest to powszechne miejsce pobierania wirusów. Aby zapobiec wykonaniu złośliwego kodu w przypadku naruszenia, dodaj do pliku wp-content/uploads/.htaccess następujący kod:
    <Files ~ "\.(php)$">
      Order allow,deny
      Deny from all
    </Files>
  10. Ogranicz dostęp IP do panelu administracyjnego. To zalecenie jest odpowiednie dla osób ze statycznym adresem IP. W pliku .htaccess в корневом каталоге сайта добавьте następujący kod:
    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
    RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
    RewriteRule ^(.*)$ - [R=403,L]

    Zamiast 127.0.0.1 wprowadź swój adres IP.

  11. Небольшой файрвол для сайта. Данные правила могут замедлить работу сайта, так как каждый запрос, поступающий на сайт, будет анализироваться с их помощью. Если вы заметите существенное снижение скорости работы сайта, не следует использовать данные правила. Zamiast этого попробуйте воспользоваться плагином Wordfence Security — Firewall & Malware Scan.
    Dodaj kod zapory do pliku .htaccess w katalogu głównym witryny:
    <IfModule mod_rewrite.c> RewriteEngine On # Blok XSS RewriteCond%{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
    # Zablokuj ustawienie zmiennej PHP GLOBALS za pomocą adresu URL RewriteCond%{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    # Zablokuj możliwość zmiany zmiennej _ZAPYTAJ przez URL RewriteCond%{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) # Blokuj wstrzykiwanie MySQL, RFI, base64 itp. RewriteCond%{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
    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} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
    RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
    RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,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} (\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
    RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
    RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
    RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
    RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
    RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
    RewriteRule ^(.*)$ - [F,L]
    # Zablokuj znany Shell RewriteEngine na RewriteCond%{REQUEST_URI} .*((php|my)?shell|remview.*|phpremoteview.*|sshphp.*|pcom|nstview.*|c99|r57|webadmin.*|phpget.*|phpwriter.*|fileditor.*|locus7.*|storm7.*).(p?s?x?htm?l?|txt|aspx?|cfml?|cgi|pl|php[3-9]{0,1}|jsp?|sql|xml) [NC,OR]
    RewriteCond %{REQUEST_METHOD} (GET|POST) [NC]
    RewriteCond %{QUERY_STRING} ^(.*)=(/|%2F)(h|%68|%48)(o|%6F|%4F)(m|%6D|%4D)(e|%65|%45)(.+)?(/|%2F)(.*)(/|%2F)(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^work_dir=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^command=.*&output.*$ [OR]
    RewriteCond %{QUERY_STRING} ^nts_[a-z0-9_]{0,10}=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^c=(t|setup|codes)$ [OR]
    RewriteCond %{QUERY_STRING} ^act=((about|cmd|selfremove|chbd|trojan|backc|massbrowsersploit|exploits|grablogins|upload.*)|((chmod|f)&f=.*))$ [OR]
    RewriteCond %{QUERY_STRING} ^act=(ls|search|fsbuff|encoder|tools|processes|ftpquickbrute|security|sql|eval|update|feedback|cmd|gofile|mkfile)&d=.*$ [OR]
    RewriteCond %{QUERY_STRING} ^&?c=(l?v?i?&d=|v&fnot=|setup&ref=|l&r=|d&d=|tree&d|t&d=|e&d=|i&d=|codes|md5crack).*$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)([-_a-z]{1,15})=(chmod|chdir|mkdir|rmdir|clear|whoami|uname|unzip|gzip|gunzip|grep|more|umask|telnet|ssh|ftp|head|tail|which|mkmode|touch|logname|edit_file|search_text|find_text|php_eval|download_file|ftp_file_down|ftp_file_up|ftp_brute|mail_file|mysql|mysql_dump|db_query)([^a-zA-Z0-9].+)*$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)(wget|shell_exec|passthru|system|exec|popen|proc_open)(.*)$
    RewriteRule .* - [F]
    </IfModule>
Zawartość