Cum de a stabili că site-ul a fost supus de injectare sql - totul despre web design pe

Cum de a stabili că site-ul a fost supus de injectare sql - totul despre web design pe
La serviciul principal principalul meu loc de muncă nu a reușit. Trebuie să spun, este foarte important pentru compania noastră.

Analiza log a arătat că a suferit o injecție SQL exploatează malware într-una dintre interogări SQL pe site.

Acest lucru a fost agravată de faptul că, până la site-ul meu a fost condus de oameni care sunt de fapt pe el și să învețe să programului. Codul de mare, pe care cred că nu se încadrează nici. Și undeva acolo, a existat o gaură.

Despre cum am rezolvat această problemă și vor fi discutate în acest articol.

Pentru a începe cu, un mic program educațional, care este injecție SQL.

Ce este SQL injection

Ia un cod pseudo

Există un control care intval trebuie să returneze un număr întreg, iar dacă ID-ul nu este un număr, condiția nu funcționează, iar cererea nu va fi executat.

Și acest lucru este lucrări adevărat dacă ați face o astfel de cerere

condiția nu este îndeplinită: intval ( „nou“) returnează 0.

Se pare că acest lucru este suficient. Dar întrebarea este ce se va întâmpla în următoarea cerere

Prin urmare, gaura de securitate. Prin aceasta, aveți posibilitatea să inserați orice interogare SQL. Până pentru a șterge de la știri

Metode de tratare a SQL injection

Cea mai sigura cale de a contracara acest tip de atac - o examinare a tuturor lucrurilor. Ie toate variabilele care sunt inserate în codul trecut prin funcția mysql_real_escape_string

o astfel de cerere nu este nimic mai gravă decât la erori în cerere nu este amenințată. În acest exemplu, vom vedea că id-ul poate fi doar un număr întreg, deci este o soluție mai corectă este următorul cod

Nu duplicat codul pentru a verifica, dar nu este, de asemenea, într-un caz comă nu trebuie omisă. Pur și simplu a verifica o variabilă decât pentru a forța serverul MySQL pentru a efectua o solicitare suplimentară.

Mai devreme sau mai târziu, o astfel de metodă se va introduce în obiceiul. În serviciul meu, a fost făcut doar o astfel de greșeală. Codul a fost pur și simplu o variabilă de cerere get.

Cu codul lor clar. Aici noi stăpânim situația. Într-un proiect mai mult sau mai puțin mare, utilizează un număr mare de biblioteci terțe părți sau aplicații: ckeditor, ckfinder, plugin-uri jQuery. culegători, ambalatori, daunloudery, sistem de statistici, phpMyAdmin, etc.

Și ei au, de asemenea, găuri. Editați mâinile lor posibilitatea de a spune nu, și dacă există ceva nedorit să facă acest lucru.

Este mult mai ușor de a proteja resursa ca un întreg. De exemplu, meu preferat CMS Danneo. este pus în aplicare la nivel de API și în cererea GET sau POST, pur și simplu nu se poate insera cuvinte cheie pentru interogări SQL.

Printre altele, acest cod vă protejează de alte atacuri, css, etc.

Ca urmare, în cazul în care solicitarea a fost interzisă cuvinte, codul va returna o eroare 500, și va arunca o excepție. Acest lucru nu este cea mai bună soluție. În cazul în care toate variabilele de cod de evacuare, și asta e bine, nu va fi de prisos pentru a informa administratorul tentativelor de injectare și de a da un atacator, de exemplu 404.

De exemplu, în clasa mea add-on mysql. Tocmai am adăugat metoda de evacuare, și în cazul în care devine datele care conțin cuvinte interzise, ​​o scrisoare este trimis la căsuța poștală administratorul site-ului, acesta este trimis la utilizator ip-, variabila pe care o protecție declanșată.

acest scenariu în timp util mi-avertisment despre încercarea de a hack viața mea. Folosind informațiile din scrisoarea, puteți bloca sau rău intenționat IP pentru a explora acele locuri în care există un atac.

Asta e, probabil, toate măsurile, după care site-ul dvs. nu va mai fi atât de ușor să se crape.

Vă doresc mult noroc în această profesie periculoasă)