Az alábbi tanácsok elsődlegesen WEB-es alkalmazásokra vonatkoznak.
Az adatbáziskezelők különböznek egymástól, de alapvető dolgokat a használatuk során figyelembe kell venni.
Az adatbázis használatbavételekor arra kell ügyelni, hogy a PHP kód sohase root vagy admin jogú felhasználóként használja az adatbázist, ugyanis ilyenkor az adatbáziskezelő képes fájlokat is létrehozni a szerveren. (Sajnos a múltban volt ilyen szomorú tapasztalatom.
Hacsak lehetséges ne teljes SQL utasításokat küldj át a szervernek, hanem view-k (nézet), triggerek és rule-ok segítségével old meg az adatbázis módosítását, a megjelenítést. Ezzel nem csak biztonságosabb lesz a rendszer, hanem egyúttal az alkalmazás oldalról átkerül a szerver oldalra is némi feladat, ami a teljesítmény szempontjából sem utolsó dolog.
Az adatbázisban soha ne tárolj jelszavakat nyílt szövegként! Még akkor sem, ha a titkosítás bonyolult lenne. Inkább tárold az md5() vagy a crypt() függvénnyel tárolt hash értéket. Ez ugyan azt eredményezi, hogyha a user elfelejti a jelszavát, akkor újat kell neki adni, de ne felejtse el. Ha mégis elfelejti, akkor küldj neki egy valamennyi ideig érvényes egyszeri linket, amivel be tudja állítani az új jelszót.
Ha távolról kell felügyelni egy adatbázist valamilyen általános kliens alkalmazással, például phpMyadmin-nal, akkor ott is használj erős jelszavakat a titkosításhoz és lehetőleg ne a default beállításokat használd.
Figyelj arra, hogy az url-ekben ne legyenek az adatbázisra utaló táblanevek még paraméterként sem.
A kliens oldalról ne küldj át sql utasítást url-ben
A kliens oldalról elküldött paraméterek lehetőleg ne GET metódussal kerüljenek át a szerverhez, mivel a böngészőben később ezek visszanézhetők.
Hacsak lehetséges használj https:// protokollt.
Az SQL injection csúnya dolog. A módszer lényege az, hogy az oldaladról elküldött GET vagy POST utasítást gyakran a szerver oldalon SQL utasítások összeállítására használják. Ha a programozó nem elég körültekintő, akkor a bevitt paraméterek segítségével az eredeti SQL utasítást végzetesen módosíthatja.
$sql = "SELECT id, username FROM user WHERE usename= '".$_GET["name"]."';";
Ez az SQL utasítás elvileg csak egy user adatait éri el, de ha a name paraméternél az alábbi paramétert küldjük el a szervernek, akkor a teljes listát megjelenítheti a szerver oldal.
https://valami.hu?name=\"valami\" OR 1 =1
Hasonló problémát okozhat, ha a szerver az UNION sql utasítást engedélyezi, akkor az eredeti lekérdezés bármit kiírathat. Probléma lehet abból is, ha hibás SQL utasítást küldünk a szervernek, ami a futás közben hibaüzenetet ad vissza.