Dacă vă întrebați: "Ce este Yii?" verifică Introducere în Cadrul Yii, care analizează beneficiile Yii și include o prezentare generală a Yii 2.0.
În această programare cu seria Yii2, ghid direct cititorii în folosirea cadrului Yii2 pentru PHP. Dacă intenționați să împărțiți cererea dvs. cu publicul, veți avea nevoie de siguranță și este bine să planificați acest lucru de la început. Din fericire, pornind de la un cadru cum ar fi Yii face acest lucru mult mai ușor decât ar fi altfel. După cum se menționează în Caracteristicile lui Yii:
Yii este echipat cu multe măsuri de securitate pentru a preveni atacurile de tip Web de la aplicații Web, cum ar fi injecția SQL, scripting cross-site (XSS), falsificarea cererilor de site (CSRF) și manipularea cookie-urilor.
În acest tutorial, vă voi trece prin conceptele de securitate de bază în cadrul aplicației Yii. Și dacă sunteți interesat, episoadele viitoare vor lucra pentru a asigura aplicația, Planificatorul de întâlniri, prezentat în seria noastră de pornire, pe măsură ce se apropie de lansarea alfa.
Înainte de a începe, amintiți-vă, încerc să particip la discuțiile de mai jos. Dacă aveți o întrebare sau o sugestie de subiect, vă rugăm să postați un comentariu de mai jos sau să mă contactați pe Twitter @reifman.
Notă: Dacă ați observat diferența dintre episoadele de serie Programming Yii, este pentru că a trebuit să am operație pe creier anul trecut. Vă mulțumim pentru răbdarea și sprijinul dvs. - este bine să scrieți din nou în mod regulat și aștept cu nerăbdare să vă continuăm să reflectați Yii2.
Dacă sunteți nou în domeniul securității aplicațiilor web, aveți multe de înțeles cu privire la ofertele oferite de Yii. Voi face tot posibilul pentru a oferi o imagine de ansamblu bazată pe cea mai bună documentație Yii 2.0. Echipa Yii împarte securitatea în șapte domenii cheie:
Să începem să facem scufundări în acestea unul câte unul.
Prezentarea Yii Framework Security a Ilko Kacharov oferă câteva diapozitive utile care rezumă scopul autentificării (și sub-subiectul, autorizarea). În esență, aici sunt întrebările pe care trebuie să le răspundă aceste subiecte:
Modelul yii / web / User al Yii se integrează cu yii \ web \ IdentityInterface pentru a gestiona starea de autentificare a utilizatorului în cadrul aplicației.
În noiembrie anul trecut, am scris un tutorial despre modelul avansat al aplicației Yii. Unul dintre avantajele avansate ale șablonului este că oferă o integrare pre-construită a modelului Utilizator cu ActiveRecord și baza de date. Aplicația dvs. oferă autentificarea bazată pe baza de date chiar din cutie.
Modelul de utilizator vă permite să vă conectați și să vă deconectați în mod programat:
Proprietatea $ isGuest determină dacă utilizatorul curent sa conectat sau nu. Când utilizatorul este deconectat, este nul, dar în caz contrar returnează o instanță a IdentityInterface.
În esență, aveți nevoie de o clasă Utilizator care extinde ActiveRecord și implementează metode pentru a sprijini IdentityInterface, cum ar fi:
$ Jeton]); / ** * @return int | string ID-ul curent al utilizatorului * / funcția publică getId () return $ this-> id; / ** * @return șir curent utilizator auth cheie * / funcția publică getAuthKey () return $ this-> auth_key; / ** * @param string $ authKey * @return boolean dacă cheia auth este valabilă pentru utilizatorul curent * / funcția publică validateAuthKey ($ authKey) return $ this-> getAuthKey () === $ authKey;
De asemenea, înainte de crearea unui utilizator, aplicația generează un șir aleatoriu ca cheie de autorizare. Acest lucru poate fi folosit în e-mailurile "ați uitat parola" sau în alte linkuri de conectare bazate pe e-mail:
($ insert)) if ($ this-> isNewRecord) $ this-> auth_key = \ Yii :: $ app- > securitate-> generateRandomString (); return true; return false;
Yii oferă două abordări integrate pentru autorizare. Lista mai ușoară de control al accesului (ACL) determină utilizatorii sau procesele cărora li se permite să efectueze acțiuni pe o resursă, iar controlul accesului mai intens bazat pe roluri (RBAC) vă ajută să gestionați accesul prin definirea rolurilor. În RBAC, numai utilizatorii sau sarcinile de sistem cu roluri specifice pot efectua acțiuni specifice.
ACL este uneori numit, de asemenea, un filtru de control al accesului (ACF). Yii oferă suport ACL în cadrul yii \ filters \ AccessControl. Este ideal pentru aplicații care au nevoie doar de un control simplu al accesului. Este ceea ce am folosit până acum în Planificatorul de întâlniri.
Iată un exemplu de siteController comun care configurează un comportament de acces pentru a filtra accesul la acțiunile disponibile, adesea pagini. În acest caz, ACL acționează la înscriere, conectare și deconectare. '?'
indică faptul că orice utilizator poate accesa paginile de conectare și de înregistrare, în timp ce '@'
indică faptul că accesul este permis numai utilizatorilor autentificați sau autentificați. În exemplul de mai jos, numai utilizatorii conectați pot să se deconecteze:
utilizați yii \ web \ Controller; utilizați yii \ filtre \ AccessControl; clasa SiteController extinde controlerul beh 'public = [' class '=> AccessControl :: className (),' only '=> [login, logout, '' '' => ['permit' => true ',' actions '=> [' login ',' signup '], "acțiuni" => ['logout'], 'roluri' => ['@'],],],],]; // ...
În timp ce controlerul crește, fiecare nouă acțiune trebuie definită în cadrul regulilor AccessControl. Și, pe măsură ce aplicația dvs. crește, fiecare controlor și toate acțiunile acestuia trebuie să integreze filtrarea ACL pentru securitate.
Controlul accesului pe bază de roluri (RBAC) oferă un sistem de autentificare mai robust, dar necesită, de asemenea, mult mai mult design și implementare în avans.
Cu RBAC, definiți autentificarea prin roluri care pot fi moștenite (sau nu) și aplicați roluri utilizatorilor. De asemenea, puteți defini reguli pentru roluri. Implementările RBAC pot deveni destul de complexe.
În figura de mai jos, administratorii pot efectua orice sarcină, iar autorii pot crea o postare și își pot actualiza propriile postări. Jane este un administrator pentru ca ea să poată îndeplini sarcinile administratorilor, iar John este doar un autor:
Yii implementează ceea ce numește "un RBAC ierarhic general, urmând modelul NIST RBAC". Funcția RBAC este furnizată de componenta de aplicație authManager.
Nu voi intra prea mult în RBAC aici, dar sper că într-un viitor tutorial. Din nou, este de până la zeița editorială - vorbind cu ei nu este niciodată ușor:
prin intermediul PopSugarPractic, pentru a pune în aplicare cu atenție RBAC, trebuie:
Puteți vedea codul necesar pentru a activa începutul unui sistem RBAC de mai jos:
authManager; // adăugați permisiunea "createPost" $ createPost = $ auth-> createPermission ('createPost'); $ createPost-> description = 'Creați o postare'; $ Auth-> adaugă ($ createPost); // adăugați permisiunea "updatePost" $ updatePost = $ auth-> createPermission ('updatePost'); $ updatePost-> description = 'Actualizare postare'; $ Auth-> adaugă ($ updatePost); // adăugați rolul "autor" și acordați acestui rol permisiunea "createPost" $ author = $ auth-> createRole ("autor"); $ Auth-> adaugă ($ autor); $ auth-> addChild ($ autor, $ createPost); // adăugați rolul "admin" și acordați acestui rol permisiunea "updatePost" // precum și permisiunile rolului "autor" $ admin = $ auth-> createRole ("admin"); $ Auth-> adaugă ($ admin); $ auth-> addChild ($ admin, $ actualizarePost); $ auth-> addChild ($ admin, $ autor); // Alocați roluri utilizatorilor. 1 și 2 sunt ID-uri returnate de IdentityInterface :: getId () // de obicei implementate în modelul dvs. de utilizator. $ auth-> assign ($ autor, 2); $ auth-> atribuie ($ admin, 1);
Pentru a implementa RBAC, trebuie să fiți pregătit să scrieți o mulțime de cod în față sau ca aplicația dvs. să crească. Și, dacă o faci, Yii va gestiona autentificarea în conformitate cu cadrul de autentificare pe care îl definiți. Cu alte cuvinte, designul și codarea în față oferă o autentificare solidă și detaliată.
După cum a învățat Mark Zuckerberg în iunie, unele site-uri web stochează parole de utilizator în text simplu, dar dvs. nu ar trebui; pentru a fi corect față de Zuckerberg, contul meu Facebook a fost odată hacked din cauza faptului că PHPL a făcut același lucru - înainte de zilele administratorilor de parole. Oricum, Yii facilitează criptarea și verificarea sigură a parolelor.
Funcția de criptare Yii utilizează bcrypt pentru a genera hashes pentru parola dvs. Când oamenii se înregistrează, se creează un hash:
$ hash = Yii :: $ app-> getSecurity () -> generatePasswordHash ($ parola);
Apoi, atunci când utilizatorul încearcă să se conecteze, este șansat și comparat cu hash-ul din baza de date:
dacă (Yii :: $ app-> getSecurity () -> validatePassword ($ parola, $ hash)) // toate bune, autentificând utilizatorul altceva // parola greșită
Dar, de asemenea, puteți folosi Yii pentru protecția datelor cu criptografie.
Cadrul Yii furnizează un număr de caracteristici încorporate pentru a proteja protecția datelor:
Orice date care provin de la utilizatori sunt eventual infectate cu atacuri cum ar fi injecții SQL sau script-uri încrucișate. Este important ca toate datele pe care le transmiteți utilizatorilor în vizualizări să fie curățate. Yii oferă câteva metode pentru acest lucru.
Mai întâi, există Html :: codifice
, care rupe în mod esențial orice SQL sau scripting:
= Html::encode($user->nume)?>
Și există o integrare cu biblioteca HtmlPurifier pentru blocuri de text mai mari:
= HtmlPurifier::process($post->text)?>
Yii oferă, de asemenea, posibilitatea autentificării de la o terță parte, care este utilă în mod special pentru a vă ajuta să vă conectați prin Google, Facebook, Twitter etc..
Am scris mai multe tutoriale pentru Envato Tuts + cu privire la utilizarea AuthClient în cadrul Yii Framework cu conectări sociale:
Am găsit căutările de conectare socială foarte bine pentru Planificatorul întâlnirilor. Utilizatorii noi pot începe să programeze o întâlnire fără o parolă.
Yii recomandă, de asemenea, o serie de cele mai bune practici atunci când vine vorba de securitatea aplicațiilor web. Și documentația sa oferă un bun prilej pentru aceste subiecte pentru oricine.
Primele trei subiecte de mai sus sunt bine gestionate prin codificarea discutată mai sus Vizualizează Securitate.
Yii oferă, de asemenea, protecție integrată CSRF pentru activități comune - și poate fi oprită atunci când este necesar. În Planificatorul de Întâlniri, a trebuit să opresc CSRF pentru a accepta mesajele postate de serviciile API ale Mailgun.
În ceea ce privește expunerea fișierelor, acest cadru ajută la minimizarea acestui fapt, prin introducerea tuturor solicitărilor de intrare în fișierul de solicitare web / index.php. Acest lucru limitează foarte mult necesitatea de a scrie codul de aplicație care filtrează cererile. Este bine gestionat într-un singur loc.
În cele din urmă, utilizarea HTTPS vă poate ajuta să vă protejați conexiunile și să colaborați cu Yii pentru a proteja utilizatorii. La începutul acestui an, am scris despre Let's Encrypt - puteți folosi acest tutorial pentru a instala HTTPS pentru aplicațiile Yii.
Dacă sunteți interesat să citiți materiale mai detaliate despre aceste subiecte, Yii 1.x Framework oferă aceste postări. Desigur, ele sunt mai vechi și mai puțin specifice pentru Yii 2, dar ele rămân utile.
Sper că v-ați bucurat de o imagine de ansamblu a securității pentru Yii2. Dacă integrați aspecte ale majorității sau tuturor conceptelor de mai sus în aplicația dvs., trebuie să aveți un serviciu web securizat. Poate doriți să verificați seria noastră Building Your Startup With PHP pentru implementarea în practică a unora dintre aceste practici de securitate.
Urmăriți tutorialele viitoare în programul nostru de programare cu seria Yii2 în timp ce continuăm să vă scufundăm în diferite aspecte ale cadrului. Salut cererile de teme și teme. Puteți să le postați în comentariile de mai jos sau puteți să ne trimiteți un e-mail pe site-ul meu Lookahead Consulting.
Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @reifman pe Twitter sau verificați pagina de instructor. Pagina mea de instructor va include toate articolele din această serie de îndată ce vor fi publicate.
Să lucrăm împreună pentru a menține zeița editorială fericită.