Ghid de securitate - PHP

Aici vorbim despre CSS, PHP, C++, MySql, Javascript, Java & jQuery.
Post Reply
User avatar
tataieee
Administrator
Posts: 3832
Joined: 17 Sep 2014, 17:52
Nume Real: Alexandru Costin
Nivel cunoştinţe IT: 10
Location: Giurgiu; România
Contact:

22 Dec 2014, 21:26

Primul lucru pe care ar trebuii sa vi-l spun aici este acesta: Never Trust User Input In General

Am sa presupun ca tu esti programatorul care nu are acces la server (administratorul serverului fiind alta persoana), si acest admin al serverului stie cum sa configureze LAMP corect si securizat.

Bineinteles,si un programator poate suprascrie setarile PHP cu un fisier php.ini pus in root.

Sau puteti folosi un framework MVC precum CakePHP care asigura un minim de securitate.

User Input

a.Sanitizati si validati toate datele ce provin $_GET, $_POST, $_COOKIE si $_REQUEST inainte de a le folosi.

b.SQL Injection
1.Aceasta este o tehnica de a exploata vulnerabilitatile unui script introducand date ce pot afecta baza de date.Aceasta vulnerabilitate este prezenta atunci cand datele venite de la useri nu este filtrata corect.
2.Prevenire: folositi mysql_real_escape_string($sir_de_caractere).

c.Cross Site Scripting (XSS)
1.Vulnerabilitate ce permite utilizatorului sa scrie propriul sau cod intr-un script (in mod normal JavaScript). Aceasta vulnerabilitate este periculoasa in mod special cand avem de-a face cu cookies sau sessions.
2.Prevenire: htmlentities (strip_tags($sir_de_caractere))

Browser Requests

1.Un tip de exploatare a unei script (site web) ce este folosit pentru transmiterea de comenzi pretinzand ca esti un utilizator in care site-ul are incredere.
2.Prevenire: Generati un “token” unic, de obicei cand este deschisa o noua sesiune si paseaza acest token prin POST-urile si GET-uri. Dupa ce pasezi acest token prin cererile POST si GET verifica daca este identic cu cel generat in SESSION.

SESSION
a. Distruge datele din SESSION la logout
1.Dupa ce durata de viata a unei sesiuni s-a terminat (logout) distruge aceasta sesiune nu doar curata COOKIE-ul. Puteti sterge toate aceste date dandu-i variabilei super globale $_SESSION valoare un array gol.
b. Stocheaza sesiunile ca fisiere mai sus de nivel-ul folderului radacina (root) sau intr-o baza de date
1.Nu lasati calea standard de salvare a sesiunile pentru ca acestea pot fi gasite foarte usor, mai ales intr-un shared hosting.

Parolele

a. Incurajeaza-ti utilizatorii sa foloseasca parole puternice
1.Cere ca parola sa contina numere, simboluri, atat litere mari cat si mici.
2.Parola trebuie sa aiba o marime de 12-14 caractere.
b.Hash si Salt pentru toate parolele
1.Foloseste cel putin sha1() (nu folositi md5()).
Functia hash() vine cu cateva optiuni noi printre care si sha256. Folositi un alt salt pentru fiecare script/aplicatie scrisa si nu uitati sa le salvati intr-un fisier mai sus decat root-ul.

Folosirea unui php.ini custom in web root

a.Dezactiveaza register_globals
b.Dezactiveaza magic_quotes
c.Dezactiveaza error_reporting
d.Chiar daca dezactivati error_reporting setati sa salvati toate erorile intr-un fisier in afara folderului radacina.

Code: Select all

 log_errors = On; 
 ignore_repeated_errors = On; 
 html_errors = Off; 
 error_log = /cale/mai_sus_de/webroot/logs/php_error_log
e.Salvati sesiunile intr-un folder mai sus de root.
1.session.save_path = /cale/mai_sus_de/webroot/sessions

.htaccess-ul din web-root

a.Dezactiveaza listarea folderelor si fisierelor
1.Options -Indexes

Datele importante

a.Opreste acesult neautrorizat la datele importante salvandule mai sus de root.
1.Aici ma refer atat la fisierele de configurare ale site-ului cat si la pagini destinate doar adminilor.
b.Foloseste un script pe post de intermediar pentru a afisa fisierele inline sau ca atasamente.
c.Tine-ti scripturile updatate la zi (WordPress, Joomla, PHPMyAdmin,etc).
d.Limiteaza accesul la PHPMyAdmin.

Upload de fisiere

a.Valideaza numele fisierelor din $_FILES inainte de a le folosi.
b.Tine-ti minte ca MIME Type-ul poate fi ascuns.
c.Nu folosi fisierele uploadate intr-un include()
d.Incearca sa eviti fisiere de tip “application/octet-stream,” “application/unknown,” or “plain/text”

Un ultim gand

Toate functiile/mici utilitare/scripturi 3rd party/etc folosite la dezvoltarea site-ului trebuiesc scoase o data ce site-ul a iesit din statiul de dezvoltare.
Ex: Dupa terminarea dezvoltarii site-ului functia phpinfo nu-si mai are rost-ul, deci poate fi dezactivata.

Sursa: http://jungla-urbana.com/viewtopic.php?f=72&t=191
*Email: w.tataieee@gmail.com
*PayPal: w.tataieee@yahoo.com
Post Reply

Return to “CSS, PHP, C++, MySql, Javascript, Java & jQuery”