Toate articolele de Sandor Kovacs

Web Developer. My daily menu: Breakfast - Wordpress | Lunch - Symfony + Drupal | Dinner: CodeIgniter

Securizeaza aplicatia web: Session fixations

Iti este securizata aplicatia web? Cunosti termenul si semnficatia de session fixation? Ii doresti sa afli mai multe despre asta?

Cand vine vorba de securitate este mereu loc de imbunatatiri, deoarece la fel cum tehnologia avanseaza pe zi ce trece, in acelasi mod gasesc si hackeri posibilitati prin care iti pot afecta securitatea aplicatiei web.

Motiv pentru care e important sa cunosti tipurile de atacuri cibernetice si ce poti face pentru a le preveni.

Ce este Session Fixation?

Un alt tip de atac cibernetic este Session Fixation. Acesta ii permite unui atacator atace sesiunea valida a unui utilizator. Atacul exploreaza o limitatie, in sensul in care aplicatia web coordoneaza sesiunea de ID, care este partea vulnerabila a unei aplicatii web.

In momentul in care un utilizator se autentifica, nu i se atribuie o sesiuna noua de ID, iar acest proces face posibil sa folosesti o sesiune de ID deja existenta. Atacul e bazat pe obtinerea unei sesiuni valide, in care utilizatorul se autentifica, urmand ca atacatorul sa preia controlul asupra sesiunii. Atacatorul trebuie sa furnizeze o sesiune ID web veritabila, iar pentru aceasta incearca sa faca victima sa foloseasca browserul.

Good to know! Acest tip de atac, tinteste sesiunile stabilite in browser-ul victimei, ceea ce inseamna ca atacul incepe inainte ca utilizatorul sa se autentifice.

Tehnici de executare

Pentru a executa atacul exista mai multe tehnici, in functie de token-urile folosite pentru sesiunile aplicatiei web.

Sesiune ID intr-un cookie

<META> tag – Acesta este considerat si un atac de tip injectare cod. Un atac care foloseste aceasta tehnica este mult mai eficient. Asta deoarece este imposibil sa dezactivezi procesarea acestor etichete in browsere.

Client-side script – Majoritatea browserelor suporta tipul de executie client-side scripting. Pentru aceasta tehnica, atacatorul poate folosi atacuri de injectare cod, ca de exemplu atacul XSS (cross-site scripting) pentru a insera un cod malicious in hyperlink-ul trimis victimei. Astfel e fieaza o sesiune ID in cookies.

HTTP header response – Pentru aceasta metoda, se cerceteaza raspunsul server-ului pentru a fixa sesiunea ID in browser-ul victimei. Astfel, atacatorului ii este permis sa insereze valoarea sesiunii ID in cookie, incluzand parametrul Set-Cookie in raspunsul header-ului HTTP, iar apoi este trimis catre browser-ul victimei.

Sesiuni token in argumentul URL-ului

Sesiunea ID ii este trimisa victimei sub forma unui link prin care victima acceseaza aplicatia web printr-un URL daunator.

Sesiuni token ascunse intr-un formular

Pentru aceasta tehnica, e necesar ca victima sa fie pacalita in autentificarea unui server web tinta, folosind un formular de login, care este creat de atacator. Formularul poate fi gazduit in emailul formatat HTML sau in server-ul web daunator.  

Exemple explicative

 

  • Client-side scripting

 

Procesul pentru acest tip de atac care foloseste scripturile de executie in browserul victimei care nu apar sub forma unui argument in URL, dar in cookie-uri. Atacatorul poate insera un cod JavaScript in URL care va fi efectuat in browser-ul victimei.

http://website.kom/document.cookie=”sessionid=abcd”;

 

  • HTTP header response

 

Prin interceptarea pachetelor de schimb intre aplicatia web si client, se face inserarea valoarei sesiunii ID in cookie prin manipularea raspunsului server-ului.

 

  • <META> tag

 

Codul de injectare e necesar sa ie introdus in URL-ul care va fi trimis victimei.

http://website.kon/<meta http-equiv=Set-Cookie content=”sessionid=abcd”>

 

 

  • Formularul

 

Pentru atacul in formular, atacatorul trebuie sa stabileasca o conexiune vertabila cu server-ul web. Mai apoi, se elibereaza sesiunea ID, sau atacatorul creaza o noua sesiune. Atacatorul trimite link-ul cu conexiunea gazduita victimei, pentru a fi accesat de victima.

Timp in care server-ul web vede sesiunea are a fost deja stabilita, nemaifiind nevoie de una noua. Astfel victima isi introduce datele server-ului web, iar atacatorul poate accesa contul utilizatorului.

Daca iti doresti sa inveti cum sa oferi aplicatiei web o securizare mai solida, gasesti aici datele mele de contact!

Cum sa verifici daca ai configurat securitatea aplicatiei web?

Iti este configurata securitatea aplicatiei web? Te intereseaza cum poti verifica daca configurarea a fost facuta corespunzator?

Cand vine vorba de securitate, un aspect important este ca aceasta sa fie configurata corespunzator. Aceasta conteaza deoarece in acest fel poti determina daca aplicatia web este intr-adevar securizata, sau daca exista puncte slabe.

Ce inseamna configurarea gresita a securitatii unei aplicatii web?

Configurarea gresita a securitatii unei aplicatii web se afla pe locul 5 pe lista vulnerabilitatilor. Daca o componenta este predispusa la atacul cibernetic datorita configurarii necurespunzatoare, se incadreaza in categoria configurarii securitatii necorespunzatoare. Indiferent de locul in care apare configurarea gresita, fie in baza de date, sau pe server-ul web e considerata acelasi tip de vulnerabilitate.

Cat de raspandita este aceasta vulnerabilitate?

Configurarea necorespunzatoare a securitatii este o categorie cuprinzatoare. In acelasi timp, este si un fenomen care se intampla chiar frecvent.

O aplicatie web este construita pe mai multe straturi, motiv pentru care posibilitatea de a gresi creste cu fiecare parte.

Ce impact aduce?

Impactul se diferentiaza in functie de specificul fiecarei configuratii gresite. Cert este ca, posibilele impacte pot fi de la cele mai mici si chiar pana la intreaga preluarea a aplicatiei web.

Preluarea de catre o terta parte a aplicatiei web inseamna informatii confidentiale care sunt furate in diferite scopuri, iar recuperarea acestora poate sa coste destul de mult.

Cum poti descoperi daca configurarea securitatii este gresita sau nu

Singura modalitate prin care poti verifica este sa incepi sa verifici intreg sistemul. Poti incepe sa verifici prin raspunsul la mai multe intrebari:

  • Atunci cand e posibil sa aplici o securitatea mai solida intr-un framework, se executa acest lucru?
  • Au ramas conturi implicite? Daca da, au fost schimbate parolele?
  • Sunt instalate sau activate functionalitati care nu sunt necesare? Pot fi sterse?

Si prea putine si prea multe functionalitati pot sa faca ca securizarea aplicatiei web sa fie instabila.

Daca iti doresti sa inveti cum sa configurezi securitatea unei aplicatii web, sau iti doresti sa inveti programare web de la zero, si nu numai, ma poti contacta aici!

Securizarea informatiilor confidentiale

Unele dintre cele mai importante parti pe care le contine un site web sunt informatiile confidentiale, fie ca sunt ale vizitatorilor, clientilor, sau chiar ale tale.

Ca si proprietarul unui site web e esential sa intelegi importanta securizarii informatiilor confidentiale. Deoarece in cazul in care o parte terta are acces la astfel de informatii, atat increderea clientilor, cat site-ul tau sunt in pericol.

Dezvaluirea unor informatii confidentiale se intampla atunci cand aplicatia sau site-ul web nu beneficiaza de o securitate puternica pentru a proteja informatiile. Aceste informatii sunt de mai multe tipuri, de la tokens pentru anumite sesiuni, parola pana la informatiile private de sanatate, sau informatii bancare.

Raspandire

In multe cazuri, in dezvoltarea unei aplicatii sau a unui site web, partea de securizare a informatiilor condifentiale e planificata spre sfarsit. Acest lucru se intampla deoarece, in plan prioritar este dezvoltarea unei aplicatii cat mai bune si functionale.

Sa lucrezi cu date confidentiale si criptate e unul dintre cele mai dificile lucruri. Aceste este unul dintre motivele pentru care se fc multe greseli in implementarea unei solutii self-built, lucru care va duce la o securizare insuficienta a datelor.

Astfel, dezvaluirea unor date confidentiale este o vulnerabilitate des intalnita, care poate fi mai daunatoare celor cu proiecte sau companii mai mici. Sigur ca, chiar si companiile mari pot fi afectate de acest fenomen, insa nu atat de des.

Impact potential

Impactul potential e considerat mereu a fi mare deoarece implica ne referim la informatii confidentiale. Pericolul consta in dezvaluirea informatiilor, iar impactul potential reflecta importanta si confidentialitatea informatiilor.

In cazul in care cardul tau bancar a fost furat, atacatorul poate goli intreg contul victimei, daca anumite certificate sunt furate atacatorul poate pretinde ca el este tinta, sau daca parolele sunt dezvaluite, atacatorul poate abuza de numele si functia ta. Totul depinde de informatiile care sunt in riscul de a fi dezvaluite.

Exploatabilitate

O mare parte dintre vulnerabilitatile criptate sunt considerate a fi greu de exploatat, in special la scara larga. Totusi, exista cealalta jumatate, in care aceste vulnerabilitati sunt mult mai usor de exploatat.

Daca un atacator ar avea acces la o baza de date care este necriptata, acestia nu ar avea nevoie de nimic special pentru a exploata informatiile gasite. Ar avea cu un strat de securitate mai putin, ceea ce ar face procesul de atac mult mai usor.

Cum previi dezvaluirea informatiilor confidentiale

Un prim pas pentru a preveni dezvaluirea informatiilor confidentiale este sa faci o analiza a datelor si sa vezi care sunt intr-adevar confidentiale si prin urmare, care sunt esentiale de protejat.

  • Dupa analiza, asigura-te de urmatoarele:
  • Informatiile nu sunt transmise in text clar niciodata;
  • Generarea cheii este securizata;
  • Informatiile nu sunt niciodata stocate in text clar;
  • Headerele din browser sunt setate sa nu faca cache in momentul in care informatiile confidentiale sunt prezentate utilizatorului;
  • Algoritmii sunt folositi pentru a cripta datele care sunt considerate a fi destul de solide.

Cum descoperi

Acest tip de vulnerabilitate este diferit de cele care sunt putin mai traditionale, motiv pentru care nu poate fi gasita prin aceleasi modalitati. Multe vulnerabilitati care fac parte din aceasta categorie nu pot fi scanate, iar acest lucru este explicat in doua motive:

  • Un pentester extern nu poate stii daca informatiile interne sunt criptate sau nu;
  • Pentru a determina riscul, trebuie decis daca informatia e considerata confidentiala, fapt care e dificil de realizat in mod automat.

In majoritatea cazurilor, pentru a vedea daca site-ul sau aplicatia ta sunt vulnerabile la dezvaluirea informatiilor confidentiale e necesar sa urmezi pasii din lista de prevenire, deoarece e singura cale prin care poti identifica daca site-ul tau securizeaza informatiile confidentiale.

Daca iti doresti sa inveti cum sa iti securizezi informatiile confidentiale sau iti doresti sa fie securizate de o parte terta, aici gasesti datele mele de contact!

Ce este CSRF?

Cunosti termenul CSRF? Iti doresti sa afli mai multe informatii despre CSFR?

Atacurile cibernetice sunt tot mai des intalnite, motiv pentru care e important sa fii la curent cu toate informatiile relevante in acest sens. Deoarece, avand un site WordPress, fie personal sau business, ai increderea vizitatorilor, dar si a clientilor, si mai mult decat atat, site-ul tau cu siguranta contine si informatii relevante pentru care ai o responsabilitate.

Informatii si date care pot fi furate de catre hackeri, iar tu ca si proprietar de site WordPress ai responsabilitatea de a asigura siguranta pentru vizitatori si clienti, chiar si atunci cand tinta nu este site-ul tau.

Exista mai multe tipuri de atacuri cibernetice, in functie de ce anume se cauta. In cazurile in care, site-ul tau WordPress nu este tinta, fara o securizare solida, atacul poate fi asupra vizitatorilor si clientilor tai.

Ce este CSRF?

CSRF este un acronim pentru Cross-Site Request Forgery. Se refera la procesul prin care atacatorul are posibilitatea de a face solicitari in numele unui utilizator. Atacatorul, deobicei profita de avantajul faptului ca utilizatorul este deja autentificat, desi in majoritatea cazurilor, pentru acest tip de atac nici nu e nevoie de autentificare.

Focusul este pe trimiterea solicitarilor, iar atacatorul nu poate citi raspunsul astfel incat nu e de interes fortarea victimei de a-si recupera informatiile. Acest tip de atac se concentreaza pe solicitarile in stadiul de procesare.

Extindere CSRF

In 2010, CSRF s-a aflat pe locul 5 pe lista cu cele mai importante vulnerabilitati. In 2013, s-a refacut statistica, iar CSRF a cazut pe locul 8, in timp ce, ca si extindere a fost schimbat de la larg-raspandit la des intalnit.

Aceasta scadere se datoreaza faptului ca atat framework-urile cat si plugin-urile au fost realizate mai bine pentru o protejare cat mai solida impotriva acestor tipuri de atacuri, dar si oamenii au inceput sa fie mai constienti. Totusi, este o vulnerabilitate des intalnita, chiar si in cadrul companiilor mari.

Un nou loc in care CSRF a inceput sa apara, este in cadrul apelurilor API. Sunt tot mai populare situatiile in care solicitarile sunt facute prin API, in locul solicitarilor normale; motiv pentru care ca si programator web e important sa iti aduci aminte de necesitatea token-urilor.

Impact potential

Acest tip de atac se poate realiza atat asupra utilizatorilor, cat si asupra administratorilor site-urilor. In cazul in care tinta este utilizatorul, un atac realizat cu succes poate duce la mai multe tipuri de solicitari in stadiu de procesare, de la transferul unor fonduri pana la schimbarea informatiilor personale sau modificarea anumitor setari.

Toate acestea ar putea rezulta pe mai departe cu preluarea intregului sistem si site web.

Exploatabilitate

Utilizatorul ar trebui sa dea click pe un link sau sa viziteze o pagina cu link-ul incorporat, care ar putea putea sa fie o eticheta img.

Acest lucru se poate realiza prin atacul cibernetic a unui site pe care atacatorul stie ca utilizatorul il va vizita, dupa care va MITMing/ ataca utilizatorul si ii va trimite un email in care va incerca sa il insele pe utilizatorul sa dea click unui link.

Cum poti descoperi un CSRF

Uita-te dupa orice link, formular sau apel API caruia ii lipseste securizarea sau un token CSRF.

Avand in vedere, ca exista multe conceptii gresite in ceea ce priveste securizarea unui site web, in care chiar si programatorii web pot cada. De aceea e indicat sa verifici si sa te uiti in sectiunea de Remediation pentru exemple in care securizarea nu este completa.

Pentru a intelege mai bine, uite un exemplu de aplicatie vulnerabila. Sa presupunem ca este interfata unei banci si arata asa:

<form action=”send.php” method=”get”>
<input name=”amount” placeholder=”Amount”>
<input name=”account” placeholder=”Destination”>
<input type=”submit” value=”Transfer”>
</form>

O solicitare pentru a trimite o anumita suma intr-un anumit cont ar arata:

https://example.com/send.php?amount=10&account=1234

In care se poate observa ca nu exista niciun mecanism de securitate si niciun token. Iar in momentul in care utilizatorul ar apasa click pe link, suma trecuta (10) s-ar transfera imediat catre respectivul cont (1234).

Daca iti doresti sa inveti cum sa iti securizezi site-ul web, sa inveti programare web de la zero, si nu numai, alaturat gasesti datele mele de contact!

Securizeaza site-ul tau PHP

Ai un site PHP? Te intereseaza modalitatile prin care il poti securiza?

Indiferent de tipul site-ului pe care il detii, de informatiile pe care le contine, sau de scopul acestuia, securizarea este una dintre cele mai importante aspecte.

Atat informatiile tale, cat si cele ale clientilor si vizitatorilor tai, odata ajunse in mediul virtual, sunt vulnerabile, iar pentru a-ti mentine business-ul, e responsabilitatea ta sa asiguri publicului virtual siguranta.

Descriere

De la an la an, limbajul de programare PHP creste, chiar mai repede decat domeniul ingineriei. Asadar, era foarte usor si obisnuit sa scrii aplicatii PHP nesigure. In cazul in care telul tau este sa folosesti limbajul PHP, e necesar si important sa ii cunosti toate capcanele.

A avea un site compromis, poate avea mai multe dezavantaje, iar unele dintre cele care te vor afecta cel mai mult vor fi:

  • O reputatie deteriorata;
  • Pierderi in venituri;
  • Date sau informatii furate.

Iar pe langa cele mentionate, e nevoie sa te gandesti si la costurile ce implica repararea problemei si timpul si efortul investite.  

Securitatea unui site PHP nu trebuie sa fie atat de dificila; iar cu anumite cunostinte ale pasilor ce urmeaza a fi facuti, dar si a riscurilor, e posibil sa poti preveni 99% din toate atacurile cibernetice posibile.

Care sunt cerintele?

Pentru a putea invata cum sa iti securizezi site-ul PHP e nevoie de bunavointa pentru a invata idei si concepte noi. De asemenea, o intelegere de baza in HTML si PHP s-ar putea sa iti fie de mare ajutor.

Ce inveti dintr-un astfel de curs?

Upa absolvirea unui astfel de curs, vei putea sa identifici si sa diferentiezi un posibil risc, sa iti maresti grupul si cunostintele pe diferite concepte ale PHP Security. Totodata, vei invata ce fel de riscuri sunt si vei obtine o lamurire a ceea ce inseamna masuri de securizare si cum sunt implementate.

Daca iti doresti sa inveti cum sa securizezi un site PHP, dar nu numai, aici gasesti datele mele de contact!

4 Pasi pentru a proteja site-ul WordPress de content editor

Te intereseaza metodele prin care poti proteja site-ul WordPress de modificari neprevazute?

Ca si programator web, ai de transformat cerintele clientilor in realitate, in ceea ce priveste partea tehnologica. Fie ca vorbim de site-uri WordPress sau aplicatii tu esti esti persoana care stie ce mersul lucrurilor.

In momentul predarii proiectului, datorita lipsei de experienta in domeniu, clientii pot accesa si modifica continutul sau anumite parti, din greseala. Desigur, totul se poate remedia, insa, daunele pot impiedica site-ul WordPress sa nu mai functioneze pentru o anumita perioada.

Pentru a evita acest tip de situatii, e indicat sa protejezi site-ul WordPress, prin anumite comenzi si sa le limitezi accesul doar la ce este absolut necesar.

Limiteaza partea de editor text si vizual

In mod implicit, editorul WYSIWYG al WordPress-ului, suporta multe optiuni de formatare pentru teme personalizate. E cea mai simpla modalitate prin care clientii au acces la schimbari precum marimea fontului si culoarea textului; lucruri care nu par sa fie un deranj prea mare, dar care pot transforma un site bine facut intr-unul care nu va mai arata bine.

In majoritatea situatiilor de acest fel, poti dezactiva de tot editorul vizual. Pentru a realiza aceasta, adauga codul in fisierul functions.php al temei.

function my_disable_visual_editor(){
   # add logic here if you want to permit it selectively
   return false;
}
add_filter('user_can_richedit' , 'my_disable_visual_editor', 10);

 

De asemenea, clientii tind sa foloseasca in exces si butoanele de italic si bold, dar si in aceasta privinta exista solutii:

# Removes bold and italic quicktags from text editor
function my_quicktags_settings( $qtInit  ) {
   //To disable ALL butons it must be set to "," (not "")
   $qtInit['buttons'] = 'more,';
   return $qtInit;
}
add_filter('quicktags_settings', 'my_quicktags_settings');

 

O alta parte consta in dezactivarea butoanelor din editorul vizual. Sigur ca, sunt situatii in care, daca anumite articole sunt mai lungi, e nevoie de subtitluri, bullet points si alte. In acest caz, poti sa personalizezi clase pentru subsectiuni, iar dupa sa dezactivezi celelalte butoane care nu sunt de folos:

# Remove visual editor buttons
function my_tinymce_buttons($buttons)
{
   # Remove the text color selector
   $remove = array('wp_adv'); //Add other button names to this array
   # Find the array key and then unset
   return array_diff($buttons,$remove);
}
add_filter(
   'mce_buttons',
   'my_tinymce_buttons'
);

Dezactiveaza editorul tema si plugin-urile

Deoarece majoritatea clientilor nu au cunostinte in web development, nu cunosc importanta fiecarui caracter, chiar si o virgula poate influenta buna functionare a site-ului WordPress. Mai mult, e o cale usoara pe care hackerii o pot exploata.

Totusi, exista o solutie simpla pentru a evita astfel de situatii: adaugarea urmatorului cod in fisierul wp-config.php:

define( ‘DISALLOW_FILE_EDIT’, true );

Pentru mai multa siguranta, acesta dezactiveaza si editorul de plugin.

Dezactiveaza optiunile de personalizare a temei

Fiecare tema WordPress e construita in propriul mod, motiv pentru care, anumite optiuni sunt neadecvate. Pentru a te asigura ca fiecare tema functioneaza corespunzator, din fisierul functions.php:

# Remove customizer options.
function my_remove_customizer_options( $wp_customize ) {
   // $wp_customize->remove_section( 'static_front_page' );
   // $wp_customize->remove_section( 'title_tagline' );
   $wp_customize->remove_section( 'colors' );
   $wp_customize->remove_section( 'header_image' );
   $wp_customize->remove_section( 'background_image' );
   // $wp_customize->remove_section( 'nav' );
   // $wp_customize->remove_section( 'themes' );
   // $wp_customize->remove_section( 'featured_content' );
   // $wp_customize->remove_panel( 'widgets' );
}
add_action( 'customize_register',
           'my_remove_customizer_options',
           30);

 

Elimina butonul de “Adauga media”

Butonul de adaugare media apare in mod implicit, in momentul in care tipul de postare personalizata suporta caracteristica editorului.

Desi, postarile personalizate sunt utilizate in diferite scopuri, acest camp nu ar trebui sa includa imagini.

In schimb, una dintre cele mai folosite optiuni pentru a integra imagini in text, este cea de featured images sau thumbnails. Astfel, devine mai usor sa integrezi imaginile in sabloanele temelor.

# Remove media buttons
function my_remove_add_media(){
   # do this conditionally if you want to be more selective
   remove_action( 'media_buttons', 'media_buttons' );
}
add_action('admin_head', 'my_remove_add_media');

Daca doresti sa elimini butonul de media doar anumitor postari, poti adauga cuvantul logic inainte de remove_action().

Daca iti doresti sa inveti cum sa devii programator web sau WordPress, alaturat gasesti datele mele de contact!

Creeaza primul tau plugin WordPress

Plugin-urile WordPress sunt scripturi care au rolul de a modifica site-ul tau. Aceste schimbari se refera de la cele mai simple care modifica mici parti din header pana la cele mai complicate care declanseaza trimiterea email-urilor, etc.

Diferenta dintre o tema WordPress si un plugin WordPress este ca tema este folosita pentru a schimba aspectul site-ului web in timp ce plugin-urile au rolul de a schimba modul de functionare.

Primul plugin

Un prim pas in realizarea unui plugin este crearea unui folder, urmand alcatuirea unui singur fisier cu o singura linie de continut. Acest lucru il poti efectua in folderul wp-content/plugins in care vei crea un nou folder care se poate numi, de exemplu greatplugin. In acest folder, alcatuieste un fisier numit greatplugin.php. Ca si un pas urmator e necesar sa deschizi fisierul intr-un editor de text in care sa lipesti urmatoarea informatie:

<?php    
/*    
Plugin Name: Pluginul meu cool    
Plugin URI: http://pluginul-meu-cool.ro    
Description: Descriere plugin cool    
Version: 1.0    Author: Sandor Kovacs    
Author URI: https://www.sandorkovacs.ro    
License: GPL2    
*/ 
?>

Daca intentionezi sa distribui plugin-ul tau, e important de retinut ca ar fi bine sa adaugi cat mai multe date posibile, dar daca nu, numele plugin-ului este de ajuns.

Acum, iti poti activa plugin-ul din back-end, desi momentan nu face nimic.

Structura plugin-ului

In cazul in care plugin-ul tau se adreseaza in special unei clase principale, pune aceea clasa in fisierul principal al plugin-ului, iar pentru alte functionalitati adauga fisiere diferite. Daca plugin-ul tau dezvolta partea de back end a WordPress-ului avand comenzi personlizate, poti creea fisierele JavaScript si CSS pentru a stoca fisierele adecvate.

Good to know! In crearea unor functionalitati complexe, e de preferat sa iti iparti plugin-ul in fisiere si foldere mutiple. De asemenea, e important sa gasesti o balanta intre gradul de utilizare, structura layout-ului si minimalismul.

Numele si functionalitatile plugin-ului

In realizarea unui plugin, o parte importanta careia sa-i acorzi mai multa atentie, este denumirea plugin-ului, functionalitatilor si claselor. Este necesar pentru a nu avea functionalitati similare care au nume aproape identince.

Una dintre cele mai folosite solutii este folosirea anumitor prefixe, scazand mult posibilitatea de a avea aceleasi denumiri ca si altcineva.

Securitatea plugin-ului

Securitatea online este unul dintre cei mai importanti factori, iar aceasta regula se aplica si in cazul realizarii unui plugin, in special daca doresti sa il distribui.

In ceea ce priveste securitatea unui plugin, aceasta se bazeaza pe doi piloni: unul care se asigura ca plugin-ul nu raspandeste date stricate si al doilea pilon care permite utilizatorului sa efectueze anumite actiuni.

Poate pare mai complicat, dar WordPress ofera multiple functionalitati pentru a duce la bun sfarsit crearea unui plugin.

Lasa ordine in urma ta

O problema cu multe plugin-uri este ca in urma lor lasa multe date care nu sunt necesare. Astfel de date sunt utilizate doar de plugin-uri si care ajung a fi o greutate in plus, daca plugin-ul nu curata dupa el.

Pentru acest proces, WordPress ofera trei hooks:

 

  • Register_activation_hook () – Acest hook iti permite sa realizezi o functionalitate care functioneaza in timp ce plugin-ul tau este activat.
  • Register_deactivation_hook () – Functioneaza ca o replica a hook-ului mai sus mentionat, dar doar atunci cand plugin-ul este dezactivat.
  • Register_unistall_hook () – Aceasta functioneaza doar cand administratorul site-ului sterge plugin-ul tau in back end. E o metoda eficienta pentru a elimina datele in plus.

 

Documentatie si standarde de codare

In cazul in care dezvolti plugin-uri pentru comunitati mari, atunci a face documentatie codului tau este considerat ca fiind un gest de bune maniere si totodata e eficient pentru business.

A face documentatie codului tau e un obicei eficient chiar daca il folosesti in mare parte in scopuri personale. In acest fel, vei avea o evidenta rolul fiecarei functionalitati, chiar daca a fost scris cu luni in urma.

De asemenea, pe langa documentatie, respectarea standardelor de codare sunt importante, pentru a se conforma cu instructiunile WordPress-ului.

Practica e mama invataturii!

Ca dupa orice teorie, practica e modalitatea prin care poti observa daca intr-adevar ai inteles. Pentru aceasta vom realiza un plugin care atrage mai multa popularitate articolelor prin stocarea tuturor datelor de vizionare a fiecarei postare.

Planificare din timp

Inainte de scrierea propriu-zisa a codurilor, e important sa te gandesti si sa incerci sa determini fiecare functionalitate de care plugin-ul are nevoie. De exemplu:

  • O functionalitate care inregistreaza fiecare vizualizare pe care o postare o are;
  • O functionalitate care permite sa recuperezi numarul burt de vizualizari;
  • O functionalitate care restabileste o lista de postari in functie de numarul de vizualizari;
  • O functionalitate care ne arata numarul de vizualizari a fiecarui utilzator.

Pregatirea functionalitatilor

Primul pas este crearea folder-ului si structura fisierului. In folderul plugins poti alcatui un folder numit great_popular, iar dupa creaza un fisier numit great_popular.php. Dupa ce deschizi fisierul poti copia urmatoarele:

<?php    
/*    
Plugin Name: Pluginul meu cool    
Plugin URI: http://pluginul-meu-cool.ro    
Description: Descriere plugin cool    
Version: 1.0    Author: Sandor Kovacs    
Author URI: https://www.sandorkovacs.ro    
License: GPL2    
*/ 
?>

Inregistrarea numarul de vizualizari ale postarilor

Daca se poate gasi gasi o functionalitate WordPress care sa ruleze atunci cand o postare este vizualizata, mai e nevoie doar de scrierea functionalitatii care inregistreaza numarul de vizualizari si dupa se face hook.

/**
* Adds a view to the post being viewed
*
* Finds the current views of a post and adds one to it by updating
* the postmeta. The meta key used is "awepop_views".
*
* @global object $post The post object
* @return integer $new_views The number of views the post has
*
*/
function awepop_add_view() {
  if(is_single()) {
     global $post;
     $current_views = get_post_meta($post->ID, "awepop_views", true);
     if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
        $current_views = 0;
     }
     $new_views = $current_views + 1;
     update_post_meta($post->ID, "awepop_views", $new_views);
     return $new_views;
  }
}

 

Recuperarea si dezvaluirea vizualizarilor

Folosirea unei functionalitati mai mult de o data poate crea redundanta, dar in acest caz promoveaza gandirea orientata spre obiect, care ofera si flexibilitate in dezvoltarea plugin-ului:

/**
* Retrieve the number of views for a post
*
* Finds the current views for a post, returning 0 if there are none
*
* @global object $post The post object
* @return integer $current_views The number of views the post has
*
*/
function awepop_get_view_count() {
  global $post;
  $current_views = get_post_meta($post->ID, "awepop_views", true);
  if(!isset($current_views) OR empty($current_views) OR !is_numeric($current_views) ) {
     $current_views = 0;
  }

  return $current_views;
}

 

Pentru dezvaluirea vizualizarilor se poate folosi urmatoarea functionalitate:


/**
* Shows the number of views for a post
*
* Finds the current views of a post and displays it together with some optional text
*
* @global object $post The post object
* @uses awepop_get_view_count()
*
* @param string $singular The singular term for the text
* @param string $plural The plural term for the text
* @param string $before Text to place before the counter
*
* @return string $views_text The views display
*
*/
function awepop_show_views($singular = "view", $plural = "views", $before = "This post has: ") {
  global $post;
  $current_views = awepop_get_view_count();

  $views_text = $before . $current_views . " ";

  if ($current_views == 1) {
     $views_text .= $singular;
  }
  else {
     $views_text .= $plural;
  }

  echo $views_text;

}

 

Lista cu postarile in functie de numarul de vizualizari

Pentru ca lista cu postarile in functie de numarul de vizualizari sa fie disponibila, e necesar sa dezvolti o functionalitate care poate fi plasata oriunde in tema site-ului.

/**
* Displays a list of posts ordered by popularity
*
* Shows a simple list of post titles ordered by their view count
*
* @param integer $post_count The number of posts to show
*
*/
function awepop_popularity_list($post_count = 10) {
 $args = array(
   "posts_per_page" => 10,
   "post_type" => "post",
   "post_status" => "publish",
   "meta_key" => "awepop_views",
   "orderby" => "meta_value_num",
   "order" => "DESC"
 );
 
 $awepop_list = new WP_Query($args);
 
 if($awepop_list->have_posts()) { echo "
<ul>"; }
 
 while ( $awepop_list->have_posts() ) : $awepop_list->the_post();
   echo '
<li><a href="'.get_permalink($post->ID).'">'.the_title('', '', false).'</a></li>

';
 endwhile;
 
 if($awepop_list->have_posts()) { echo "</ul>

";}
}

Pentru a adauga precautiune, poti adauga aceasta functionalitate in tema ta:

if (function_exists("awepop_popularity_list")) {
  awepop_popularity_list();
}

 

In acest fel, daca plugin-ul este dezactivat, iar functionalitatile nedefinite, PHP nu va arata o eroare a site-ului, ci doar lista nu va fi disponibila.

Daca iti doresti sa inveti cum sa dezvolti primul tau plugin, sa inveti programare de la zero, si nu numai, alaturat gasesti datele mele de contact!