AlexxBlog.com


Colţul meu pe Internet

Securizarea infuziilor şi modificărilor în PHP-Fusion

with one comment

Cu toţii ştim că securitatea unui portal este foarte importantă. În acest articol vrem să vă arătăm cum să creaţi modificări sau fără greşeli.

1. Drepturile utilizatorilor:

Pentru a verifica drepturile membrilor şi grupurilor de membri folosiţi întotdeauna:

- constantele iGUEST, iUSER, iMEMBER, iADMIN, iSUPERADMIN, iUSER_RIGHTS, iUSER_GROUPS;

- funcţiile checkrights(), getuserlevel(), checkgroup(), groupaccess().

Exemplu:

if (iMEMBER) echo "Salut!";

else echo "Înregistrează-te!";

2. Interogări Mysql:

Folosiţi întotdeauna funcţiile integrate în pentru a interoga baza de date (Mysql):

- dbquery($query) - pentru a efectua un query mysql;

- dbrows($query) - pentru a cunoaşte numărul de rânduri dintr-un query mysql;

- dbcount($camp, $tabel, $conditii) – Afişează suma valorilor câmpului ($camp) din tabel ($tabel) în funcţie de condiţiile puse ($conditii);

- dbresult($query, $camp) - afişează conţinutul câmpului ($camp) în funcţie de primul rând din $query;

- dbarray($query) – Inserează datele din $query într-un array asociativ;

- dbarraynum($query) – Inserează datele din $query într-un array poziţional;

Un exemplu:

// efectuez interogarea

$result = dbquery("SELECT * FROM ".$db_prefix."custom_pages WHERE page_id='$page_id'");

// Controlez ca interogarea să aibă cel puţin un rând

if (dbrows($result) != 0) {

// Pun rezultatele într-un array poziţional

$data = dbarray($result);

// Folosesc datele din array

echo $data['page_title'];

} else die("Eroare!");

Observaţie: Amintiţi-vă să optimizaţi interogările mysql. Server-ului nu îi va place să primească sute de interogări pentru fiecare sait ;)

3. $_POST şi $_GET:

- Folosiţi întotdeauna funcţia stripinput() pentru a vă apăra împotriva codurilor HTML şi periculoase atunci când doriţi să adăugaţi informaţii în baza de date.

Exemplu:

$data = stripinput($POST['']);

Această funcţie înlocuieşte anumite caractere cu „entities” (entităţi?) HTML. De exemplu ghilimele “ devin ”.

- Dacă variabila POST/GET trebuie să fie un număr folosiţi funcţia isNum(). Dacă un număr trimis este folosit într-un query mysql folosiţi acest cod înainte să puneţi ceva în tabelul mysql:

if (!isNum($_POST['numarul_meu'])) falback("index.");

Sau:

$numarul_meu = isNum($_POST['numarul_meu']) ? $_POST['numarul_meu'] : $numar_predefinit;

- Nu trimiteţi prin variabila GET informaţii importante precum parole.

- Încercaţi să lucraţi cu baza de date prin câmpuri ID. Sunt mai uşor de manipulat şi sunt mai siguri. Este mai uşor să stabiliţi dacă o valoare este un număr cu ajutorul funcţiei isNum() decât să elaboraţi un „string” (caractere?) şi să stabiliţi dacă este sigur sau nu.

4. Alte lucruri:

- Puneţi acest cod la începutul fiecărui script de administrare:

if (!checkrights("IP")) fallback("../index.");

- Puneţi acest cod la începutul fiecărui panou:

if (!defined("IN_FUSION")) { header("Location:../../index."); exit; }

- Puneţi acest cod la începutul – paginilor incluse? - :

if (!defined("IN_FUSION")) { header("Location:../index."); exit; }

- Verificaţi întotdeauna imaginile încărcate cu funcţia verify_image(). Amintiţi-vă că anumite browser-ere (Navigatoare web?) permit executarea anumitor scripturi .JS prin tag-urile HTML

- Nu abandonaţi e_notice_warnings (erorile?). Amintiţi-vă să declaraţi variabilele cu valori predefinite.

Un exemplu fără declarare:

$otherdata = 'a';

$data = array('b', 'c', 'd');

for ($i=0;$i)

if ($otherdata==$data[$i]) $result = "OK";

}

$final_result = $result;

Codul de mai sus va afişa o eroare: e_notice warning: Variable $result not defined at line XXX.

Scriptul de mai jos este cel corect şi nu va afişa nicio eroare:

$otherdata = 'a';

$data = array('b', 'c', 'd');

$result = "DEFAULT VALUE"; //acest rând rezolvă problema

for ($i=0;$i)

if ($otherdata==$data[$i]) $result = "OK";

}

$final_result = $result;

Am mai scris pe tema asta:

Written by Alex

March 29th, 2008 at 3:08 pm

Posted in PHP-Fusion

Tagged with , , , ,

One Response to 'Securizarea infuziilor şi modificărilor în PHP-Fusion'

Subscribe to comments with RSS or TrackBack to 'Securizarea infuziilor şi modificărilor în PHP-Fusion'.

  1. Am nevoie de ajutorul tau.Daca esti liber si ma poti ajuta da-mi add (kris_93boss). Multumesc!
    Mai multe vorbim pe mess :) .

    Cristi

    18 Oct 08 at 6:56 pm

Leave a Reply