Securizarea infuziilor şi modificărilor în PHP-Fusion
Cu toţii ştim că securitatea unui portal PHP-Fusion este foarte importantă. În acest articol vrem să vă arătăm cum să creaţi modificări sau infuzii 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 PHP integrate în PHP-Fusion 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 PHP 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.php");
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.php");
- Puneţi acest cod la începutul fiecărui panou:
if (!defined("IN_FUSION")) { header("Location:../../index.php"); exit; }
- Puneţi acest cod la începutul – paginilor incluse? - :
if (!defined("IN_FUSION")) { header("Location:../index.php"); 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 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