WordPress este open source, ceea ce înseamnă că toată lumea, inclusiv hackerii cu intenții rău intenționate, poate curăța codul sursă în căutarea găurilor în securitatea sa. În acest set de tutoriale, vom trece prin procesul de creare a unui plugin WordPress pentru a detecta și remedia orice defecțiuni de securitate care ar putea fi în instalarea WordPress.
Mergeți mai departe și faceți un nou dosar în directorul de pluginuri numit sigur
, apoi creați un fișier numit safe.php
inauntru. Primele câteva linii de cod pentru un plugin sunt doar spunând WordPress că este un plugin, ceea ce se numește și alte informații de acest gen. Această secțiune este similară cu metadatele unei teme sau șablon.
/ * Nume Plugin: URI Plugin Ușor: http://wp.tutsplus.com Descriere: Cel mai simplu și eficient mod de a vă asigura site-ul WordPress de atacatori. Autor: Fouad Matin Versiune: 1.0 URI autor: http://wp.tutsplus.com/author/fouad * /
Actualizare: După comentariile lui Christopher de mai jos, nu mai este nevoie să se definească WP_CONTENT_URL
, WP_CONTENT_DIR
, WP_PLUGIN_URL
, și WP_PLUGIN_DIR
ca WordPress le definește pentru noi în fișier include / default-constants.php
.
Apoi trebuie să punem în practică niște cârlige de acțiune, care sunt funcții declanșate după un anumit eveniment, cum ar fi admin_menu
funcție. Acțiunile sunt de obicei utilizate pentru modificarea datelor din baza de date, a mesajelor de e-mail și modificarea a ceea ce este afișat pe ecran. Filtrele, pe de altă parte, sunt cârligele care sunt lansate înainte de redarea textului sau trimiterea de date. De asemenea, puteți să eliminați acțiuni dacă doriți, cum ar fi wp_generator
funcţie.
remove_action ('wp_head', 'wp_generator');
Mai întâi, înainte de a adăuga oricare dintre textele noastre în plugin, vom incorpora în mod esențial o foaie de stil utilizând wp_enqueue_style
funcţie. Această funcție este doar o modalitate sigură de a adăuga fișiere CSS la o pagină generată WordPress. Pentru mai multe informații despre enqueuing, consultați tutorialul lui Japh cu privire la includerea javascript și css.
ADD_ACTION ( 'admin_enqueue_scripts', 'safe_styles'); funcția safe_styles () wp_enqueue_style ('safe_style', plugins_url ('/ css / safe.css', __FILE__));
Acum, pentru ca utilizatorul să poată deschide pagina pluginului, trebuie să adăugăm o pagină de meniu pentru plugin-ul nostru. De asemenea, pluginul de securitate trebuie să fie disponibil doar administratorilor (puteți schimba acest lucru dacă doriți).
add_action ('admin_menu', 'add_menu_bpg'); funcția add_menu_bpg () if (! current_user_can ('administrator')) return false; dacă function_exists ('add_menu_page')) add_menu_page ('Safe', 'Safe', 'edit_pages', 'safe-admin-page', 'safe_main', WP_PLUGIN_URL '/ safe / img / safe.png') ;
Pentru a afișa informații pe pagina de pluginuri, folosim metaboxuri pentru a face să pară în concordanță cu tema administratorului WordPress. Vom dori să afișăm informațiile despre sistem / server și să executăm și câteva verificări de securitate de bază și rapide.
funcția safe_meta_box () ?>Acum, hai să verificăm dacă există un cont cu setarea implicită de admin care este prima estimare a majorității hackerilor și, prin urmare, o modalitate ușoară în panoul de administrare. De asemenea, vă recomandăm să configurați un fișier .htaccess în fișierul dvs.
wp-admin
care blochează toate adresele IP, altele decât ale dvs. În următorul articol, vom configura o modalitate de a configura .htaccess din pagina pluginului.global $ wpdb; echo "ID-ul WP ID META a fost eliminat din corelarea WordPress„; echo "„; $ nume = $ wpdb-> get_var ("SELECT user_login FROM $ wpdb-> utilizatori WHERE user_login =" admin ""); dacă ($ name == "admin") echo 'utilizatorul "admin" există.„; altceva echo 'Niciun utilizator "admin".„; echo '„; echo "„; dacă (file_exists ('.htaccess')) echo '.fișierul htaccess găsit în wp-admin /„; altceva echo 'Fișierul .htaccess nu există în secțiunea wp-admin.„; echo '„; ?>Să adăugăm o altă coloană / casetă în partea dreaptă a ecranului, unde să putem afișa toate informațiile și setările serverului.
funcția safe_meta_box2 () ?>
Numai pentru scopuri organizaționale, creați un nou director numit inc
în interiorul tău sigur
director, unde veți crea un fișier numit functions.php
pentru a ne menține funcțiile principale. Aceste funcții vor fi responsabile pentru rularea testelor, verificarea permisiunilor fișierelor, setările bazei de date etc. Este mai bine să le separați de fișierul plugin principal, astfel încât să fie mai ușor de navigat și citit.
Mai întâi, începeți prin inițierea unei conexiuni la baza de date și prin preluarea versiunii MySQL și a tabloului de informații MySQL. De asemenea, hai să verificăm dacă modul de siguranță PHP este activat, deoarece poate provoca unele dureri de cap cu alte pluginuri și setări.
funcția safe_get_serverinfo () global $ wpdb; $ sqlversion = $ wpdb-> get_var ("Versiunea SELECT VERSION () AS"); $ mysqlinfo = $ wpdb-> get_results ("SHOW VARIABLES LIKE 'sql_mode'"); dacă (is_array ($ mysqlinfo)) $ sql_mode = $ mysqlinfo [0] -> Valoare; dacă (gol ($ sql_mode)) $ sql_mode = __ ('Nu este setat'); $ sm = ini_get ("safe_mode"); dacă (strcasecmp ('On', $ sm) == 0) $ safe_mode = __ ('On'); altfel $ safe_mode = __ ('Off');
Pentru a accepta pingback-urile primite, allow_url_fopen
trebuie să fie setat la "on" în php.ini. Cu toate acestea, acesta face, de asemenea, codul dvs. susceptibil la injecție de cod, deoarece file_get_contents ()
pot prelua date din locații la distanță, cum ar fi un server FTP sau un server web.
dacă (ini_get ('allow_url_fopen')) $ allow_url_fopen = __ ('On'); altceva $ allow_url_fopen = __ ('Off');
Restricțiile de memorie și timpii de execuție vor juca un rol major în următoarea parte a tutorialului pluginului pentru a sugera posibilele soluții la erorile de securitate în timp ce țin cont de limitele sistemului.
dacă (ini_get ('upload_max_filesize')) $ upload_max = ini_get ('upload_max_filesize'); altceva $ upload_max = __ ('N / A'); dacă (ini_get ('post_max_size')) $ post_max = ini_get ('post_max_size'); altceva $ post_max = __ ('N / A'); dacă (ini_get ('max_execution_time')) $ max_execute = ini_get ('max_execution_time'); altceva $ max_execute = __ ('N / A'); dacă (ini_get ('memory_limit')) $ memory_limit = ini_get ('memory_limit'); altceva $ memory_limit = __ ('N / A'); dacă (funcția_există ('memory_get_usage')) $ memory_usage = rotundă (memory_get_usage () / 1024/1024, 2). __ ("MByte"); altfel $ memory_usage = __ ('N / A'); dacă (is_callable ('exif_read_data')) $ exif = __ ('Da'). "(V". Substr (phpversion ("exif"), 0,4). altceva $ exif = __ ('Nu'); dacă (is_callable ('iptcparse')) $ iptc = __ ('Da'); altceva $ iptc = __ ('Nu'); dacă (is_callable ('xml_parser_create')) $ xml = __ ('Da'); altceva $ xml = __ ('Nu');
Acum, am scuipat toate datele pe care tocmai le-am colectat despre server.
?>
Un alt defect major în majoritatea instalărilor WordPress generice este utilizarea prefixului prestabilit al tabelului: wp_
. În următorul articol, vom configura o metodă de salvare și redenumire a tabelelor unde se află safe_check_table_prefix
și safe_errorsoff
funcțiile vor intra în joc.
funcția safe_check_table_prefix () if ($ GLOBALS ['table_prefix'] == 'wp_') echo 'Prefixul tău de masă nu ar trebui să fie wp_.
„; altceva echo 'Prefixul tău de masă nu este wp_.
„; funcția safe_errorsoff () echo 'Erorile DB WordPress dezactivate.
„;
Dacă aveți o versiune mai veche de WordPress, atunci prima actualizare. Indiferent de cât de bine sunteți de păstrați evidența actualizărilor, există întotdeauna posibilitatea ca dumneavoastră să fiți în urmă. Odată ce defectele de securitate ale unei versiuni anterioare sunt afișate în jurnalul de modificări pentru noua versiune, securitatea instalării dvs. este acum compromisă. Cele mai multe teme o fac în mod implicit, dar doar pentru a fi sigur, am eliminat-o mai devreme folosind remove_action
filtrează și acum ne vom asigura că și utilizatorul final știe.
funcția safe_version_removal () global $ wp_version; echo "Versiunea dvs. WordPress a fost ascunsă cu succes.
„; funcția safe_check_version () $ c = get_site_transient ('update_core'); dacă (is_object ($ c)) if (gol ($ c-> actualizări)) echo ''.__ (' Aveți cea mai recentă versiune a Wordpress. ').'„; întoarcere; dacă (! gol ($ c-> actualizări [0])) $ c = $ c-> actualizări [0]; dacă (! isset ($ c-> răspuns) || 'latest' == $ c-> răspuns) echo ''.__ (' Aveți cea mai recentă versiune a Wordpress. ').'„; întoarcere; dacă ('upgrade' == $ c-> răspuns) $ lv = $ c-> curent; $ m = ''.Sprintf (' Wordpress (% S) este disponibil. Ar trebui să faceți upgrade la ultima versiune. ', $ Lv).'„; echo __ ($ m); întoarcere; echo ''.__ (' A apărut o eroare în timp ce încerci să regăsești starea versiunii Wordpress. ').'„;
Cu versiunile mai noi ale WordPress, securitatea wp-config.php
nu ar trebui să fie o problemă, dar e mai bine să fii în siguranță decât să îmi pare rău. Dacă cineva cu intenție de rău intenționează să-și pună mâna pe dvs. wp-config.php
, aceștia ar putea accesa acreditările de acces la baza de date, cheile de autorizare și sărurile bazei de date. Vom verifica dacă putem obține fișierul, scrie în fișier sau dacă există în acel director. În caz contrar, vom afișa o notificare urgentă și, în următorul articol, o metodă de remediere ușoară a problemei.
funcția safe_wpConfigCheckPermissions ($ wpConfigFilePath) if (! is_writable ($ wpConfigFilePath)) echo ''.__ ("Fișierul de configurare wp nu este o amenințare.").'„; return false; dacă funcția_există ('fișier') ||! function_exists ('file_get_contents') ||! function_exists ('file_put_contents')) echo ''.__ ("Fișierul de configurare wp nu este o amenințare.").'„; return false; altceva echo ''.__ (' Fișierul dvs. de configurare wp poate fi compromis de hackeri, remediați permisiunile. ').'„; return true;
Acum, trebuie să ne întoarcem la safe.php
fișier și adăugați noul nostru functions.php
, deasupra acului și cârligele de filtrare.
requ_once (WP_PLUGIN_DIR. "/safe/inc/functions.php");
Înapoi la safe.php
, ultima adăugare este safe_main ()
care este apelată atunci când pagina este încărcată. Aici trebuie să adăugăm metaboxele pe care le-am definit mai devreme și să adăugăm ceva stil.
funcția safe_main () add_meta_box ("safe_box_1", "Verificări de bază", "safe_meta_box", "box1"); add_meta_box ("safe_box_2", "Informații despre sistem", "safe_meta_box2", "box2"); echo "„;„; do_meta_boxes ('box1', 'avansat', ');' echo '„; do_meta_boxes ('box2', 'avansat', ');' echo '
În cele din urmă, faceți un fișier CSS numit safe.css
într-un director numit css
sub noi sigur
director. Puteți să stylizați casetele oricum doriți sau puteți folosi doar următorul cod CSS pentru eroarea și textul de succes:
div.pass, span.pass culoare: # 7AB317; div.fail, span.fail culoare: # ff3333; div.fail, span.fail a culoare: # ff3333;
Până acum, ar trebui să știți cum să adăugați o pagină de meniu pentru plugin-ul dvs., să aplicați acțiuni și cârlige de filtrare și să verificați programatic orice defecțiuni de securitate în WordPress.
Dacă aveți alte sugestii sau întrebări referitoare la pluginurile de securitate, nu ezitați să lăsați un comentariu! De asemenea, acest plugin se află pe GitHub, deci mergeți mai departe, deschideți depozitul și personalizați-l oricum doriți.
Actualizare: acest articol a fost actualizat conform sugestiilor lui Christopher de mai jos.