Recomandări de protecție generală (MySQL și interfața Web SQL)
Oricine utilizează MySQL (sau orice alt server SQL) pe un computer conectat la Internet ar trebui să citească această consultare pentru a evita cele mai frecvente probleme de protecție.
Cu toate acestea, este necesar să subliniem importanța protecției complete a serverului (nu doar a unui server MySQL) împotriva tuturor tipurilor de atacuri utilizate. În acest articol, din păcate, nu este posibil să se acopere toate aspectele problemelor de securitate, dar cele mai importante probleme sunt considerate destul de pe deplin.
MySQL utilizează securitatea bazată pe Liste de control al accesului (ACL) pentru toate conexiunile, cererile și alte operații pe care un utilizator le poate încerca să le efectueze. Există și un suport pentru conexiunile criptate prin SSL între clienții MySQL și serverele. Multe dintre conceptele discutate în acest articol nu sunt specifice pentru MySQL și pot fi aplicate tuturor aplicațiilor.
Când începe MySQL, încercați să urmați aceste recomandări:
Nu acordați nimănui acces (cu excepția administratorului MySQL) la tabela USER din baza de date MySQL. Parola criptată este parola reală în MySQL. Dacă cunoașteți parola menționată în tabelul USER pentru acest utilizator, vă puteți conecta ușor ca acest utilizator dacă aveți acces la computerul listat pentru acest cont.
Studiați sistemul de privilegii de acces MySQL. Comenzile GRANT și REVOKE sunt folosite pentru controlul accesului la MySQL. Nu acordați mai multe privilegii decât este necesar. Nu acordați niciodată privilegii tuturor computerelor din rețea. Comenzi pentru lista de verificări:
2. Utilizați comenzile SHOW GRANTS și verificați. pentru a vedea cine are acces la ceea ce. Îndepărtați privilegiile inutile utilizând comanda REVOKE.
Nu stocați parole ca text simplu în baza de date. Când computerul este spart, un intrus poate obține lista completă
și utilizați-le. În schimb, utilizați algoritmul MD5 sau oricare altul bazat pe o funcție hash cu o singură cale.
Nu alegeți parole din dicționare. Există programe speciale pentru a le selecta. Chiar și parole precum "xfish98" sunt foarte rele. Mult mai bine - „“ duag98 „care conține același cuvânt“ pește «dar tastat o cheie spre stânga de pe tastatură O altă metodă este de a utiliza o parolă ca» UMBBR «care constă din primul cuvânt în propoziția» Maria. a existat un copil mare ". Aceste parole sunt ușor de memorat și tipărite, dar este dificil să ridici un atacator.
Utilizați firewall-ul. Vă va proteja de cel puțin 50% dintre vulnerabilitățile exploatate în orice software. MySQL utilizează portul implicit de 3306. Acest port trebuie să fie accesibil numai de la calculatoare de încredere. Cel mai simplu mod de a verifica dacă este sau nu portul MySQL este deschis este de a încerca următoarea comandă de la unele mașini de la distanță, în cazul în care server_host - un nume de gazdă serverul MySQL: telnet server_host 3306
Nu aveți încredere în datele introduse de utilizatori. Acestea vă pot înșela codul introducând caractere speciale în formularul web sau în adresa URL. Asigurați-vă că aplicația dvs. rămâne sigură dacă utilizatorul tipărește ceva de genul: DROP DATABASE mysql; Acesta este un exemplu critic, dar multe pierderi de securitate și pierderi de date pot apărea din cauza hackerilor care folosesc metode similare. De asemenea, nu uitați să verificați datele numerice. O eroare obișnuită este protejarea numai a rândurilor. Uneori, oamenii cred că dacă baza de date conține numai date disponibile public, nu ar trebui protejată. Acest lucru este greșit. Cel puțin, un atac DoS poate fi efectuat împotriva acestor baze de date. Cea mai ușoară modalitate de a proteja împotriva acestui tip de atac este folosirea apostrofelor în jurul constantelor numerice:
SELECT * FROM tabel WHERE ID = '234'. MySQL convertește automat acest șir la un număr și elimină toate caracterele non-numerice din interogare. Verificăm:
Toate aplicațiile web:
1. Încercați să introduceți '' '' '' în formularul Web. Dacă primiți orice fel de eroare MySQL, investigați imediat această problemă.
2. Încercați să modificați adresa URL adăugând% 22 ('' '),% 23 (' # '),% 27' ''.
3. Încercați să modificați tipurile de date din adrese URL dinamice de la caractere numerice la caracterele date în exemplele anterioare. Cererea dvs. trebuie să fie în siguranță împotriva atacurilor și a altor atacuri similare.
4. Încercați să introduceți caractere, spații și caractere speciale în locul numerelor din câmpurile numerice. Aplicația dvs. trebuie să le elimine înainte ca acestea să fie acceptate de MySQL, sau aplicația dvs. ar trebui să emită o eroare.
5. Verificați dimensiunile datelor înainte de a accepta MySQL.
6. Aplicația dvs. trebuie să se conecteze la baza de date utilizând un alt utilizator decât cel pe care îl utilizați în scopuri administrative. Nu acordați aplicației mai multe drepturi decât cele de care au nevoie.
Verificați funcția addslashes (). După PHP 4.0.3, funcția Mysql_escape_string () este disponibilă, care se bazează pe o funcție cu același nume în API-ul MySQL C.
MySQL C utilizatori API:
Verificați cererea API mysql_escape_string ().
Verificați tranzițiile modificatorului și citatele în firele de interogare.
Utilizatorii Perl DBI:
Verificați metoda citării () sau utilizați substituenții.
Utilizatorii Java JDBC:
Utilizați obiectul PreparedStatement și placeholders.
Nu trimiteți date necriptate pe Internet. Aceste date sunt disponibile oricui are timpul și capacitatea de a le intercepta și de a le folosi în scopuri proprii. În schimb, utilizați un protocol criptat, cum ar fi SSL sau SSH. MySQL acceptă versiunea internă SSL 3.23.9. SSH poate fi folosit pentru a crea tuneluri criptate.
Aflați cum să utilizați tcpdump. În cele mai multe cazuri, puteți verifica dacă fluxurile de date MySQL sunt de fapt necriptate utilizând următoarea comandă:
shell> tcpdump -l -i eth0 -w-src sau dst port 3306 | siruri de caractere