10 cele mai comune erori de programare și codificare
Următoarele sunt câteva dintre cele mai comune erori de programare și de codare produse de dezvoltatori. Aceste erori au generat întreruperi, furt de date, intruziuni și multe altele. Unele dintre erorile Top 10 site-uri pentru coduri de eroare și depanare Top 10 site-uri pentru coduri de eroare și depanare Citește mai multe sunt specifice anumitor limbi, cum ar fi C, C ++ etc., dar unele sunt comune în alte limbi, cum ar fi Java, JavaScript, Python etc..
Vă recomandăm să verificați frecvent această listă pentru a vă asigura că nu faceți niciunul dintre acestea în codul dvs. Această listă este sortată în ordinea importanței de sus în jos.
1. Overflow de tampon
Buffer Overflow se produce atunci când datele sunt scrise într-un tampon după sfârșitul acesteia. Poate apărea din cauza calculelor greșite ale poziției de scriere. Sau scrierea continuă într-un tampon fără a verifica lungimea. Oricare ar fi motivul, această eroare este una dintre cele mai frecvente și a dus la exploatări majore. Unele dintre acestea includ Morris Internet Worm 6 Viruși de computer care au schimbat lumea 6 Virușii de calculator care au schimbat lumea Ieri am aruncat o privire la unele dintre cele mai dăunătoare virusuri de computer de înaltă profil din istorie, iar astăzi vom fi explorarea o parte din cele mai obscure în schimb. Termenul “virus” nu a fost atașat la malware ... Citește mai mult în 1988, viermele W32 / Nimda în 2001 și eroare Sendmail în 2003.
A C Exemplu:
char array [6] = "salut"; strcat (array, "joe"); / * <- This line causes a buffer overflow. */
2. SQL Injection
SQL Injection Ce este o injecție SQL? [Explicarea MakeUseOf] Ce este o injecție SQL? [MakeUseOf explică] Lumea securității pe Internet este afectată de porturi deschise, backdoors, găuri de securitate, troieni, viermi, vulnerabilități ale firewall-ului și o serie de alte probleme care ne țin pe fiecare în fiecare zi. Pentru utilizatorii privați, ... Citește mai mult este o tehnică pentru injectarea comenzilor SQL în intrarea utilizatorului astfel încât aceste comenzi să fie executate direct de către baza de date. Aceasta permite atacatorului să efectueze acțiuni rău intenționate, cum ar fi ștergerea tabelelor, abandonarea bazelor de date, furtul de date și multe altele.
O cauză cheie a atacurilor SQL Injection reușind este că software-ul aplicației care procesează datele introduse de utilizator efectuează verificări și validări insuficiente pe intrare înainte de al trece în baza de date pentru execuție.
Exemplu Java:
// Următoarea este o valoare a parametrului cu injectarea SQL String username = "joe"; ștergeți de la utilizator în cazul în care numele de utilizator ca "%"; Conexiune con = ...; // crea conexiunea la baza de date // Când această instrucțiune este executată, toți utilizatorii vor fi șterși din baza de date. con.createStatement () execute ("actualizați setul de utilizatori logged_in = 1 unde username = '" + username + "'");
3. Injecție comandă OS
OS Command Injection (Comandă de comandă OS) apare atunci când intrarea specificată de utilizator este transmisă direct sistemului de operare pentru a fi executată de către aplicație fără o verificare adecvată. O astfel de operație ar putea fi utilizată de o aplicație pentru a utiliza o comandă existentă pe sistemul de operare. Atunci când aplicația trece intrarea utilizatorului fără validarea corectă a acesteia, aceasta deschide calea pentru un atacator să utilizeze constructe inteligente pentru a executa comenzi malware. Aceste comenzi pot fi, de exemplu, să ștergeți fișiere, să furați datele, să modificați permisiunile asupra fișierelor și multe altele.
4. Overflow sau Wraparound
Un Integer Bazele Programării Calculatoarelor 101 - Variabile și Tipuri de Date Bazele Programării Calculatoarelor 101 - Variabile și Tipuri de Date După ce am introdus și am vorbit puțin despre programarea orientată pe obiecte înainte și de unde vine numele de același nume, am crezut că este timpul să trecem prin elementele de bază absolută de programare într-un mod specific non-lingvistic. Acest lucru ... Citește mai mult Eroare de depășire apare atunci când încercați să stocați o valoare mai mare într-un tip integrat decât se potrivește. Când se întâmplă acest lucru, valoarea mai mare este trunchiată și operația se termină cu stocarea unui rezultat imprevizibil. De exemplu, un scurtcircuit nesemnat de 2 octeți poate stoca o valoare maximă de 65535. Acum, imaginați adăugarea a două valori scurte, cum ar fi 65530 și 10 și stocarea rezultatului într-un scurt. Rezultatul (65545) nu se va potrivi într-un scurt interval, lăsând o valoare imprevizibilă în ținta scurtă ca rezultat al trunchierii. Atunci când utilizați ulterior această valoare într-o altă operație (cum ar fi un index al matricei), veți ajunge la rezultate imprevizibile.
A C Exemplu:
scurtă a = 65530, b = 10; scurt c = a + b; // pe calculatorul meu, c are valoarea neașteptată: 4
5. Validarea necorespunzătoare a unui index de matrice
O altă eroare foarte frecvent întâlnită în software este Validarea necorespunzătoare a unui index de matrice. Apare la accesarea unei matrice Cum funcționează matricele și listele în Python Cum funcționează matricele și listele în Python Arrays și liste sunt unele dintre cele mai utile structuri de date în programare - deși puțini oameni le folosesc la întregul lor potențial. Citiți mai multe folosind un index care se află în afara limitelor matricei. Când accesați o locație în afara limitelor de date valide ale programului, veți ajunge la o eroare de acces la memorie (cunoscută și ca o încălcare a segmentării). Când locația de memorie se află în limitele de date, dar în afara matricei, vă uitați la corupția memoriei când scrieți în astfel de locații.
Aceste tipuri de erori sunt mai frecvente cu C și C ++, dar pot apărea cu orice limbaj, chiar și cu cele cu gestionare automată a memoriei, cum ar fi Java, JavaScript, Python etc. Singura modalitate în care astfel de erori pot fi atenuate în software-ul este de dvs. programator, exercitând o atenție suficientă în timpul codării.
6. Alocați resurse fără limite
Alocarea memoriei este foarte frecventă în C și C ++, deoarece toate gestionarea memoriei în aceste limbi este manuală. Alocarea memoriei fără validarea corespunzătoare a mărimii alocate poate duce la eșecul alocării. Atunci când rezultatul acestei alocări nu este verificat, ci folosit direct, aveți o rețetă pentru dezastru.
Aceste tipuri de erori sunt, de asemenea, posibile fără gestionarea manuală a memoriei, cum ar fi Java, JavaScript și Python atunci când se alocă arrays. Deci, trebuie acordată o atenție corespunzătoare atunci când se alocă rețele în aceste limbi.
O altă posibilitate ca această eroare să apară este să creeze alte resurse, cum ar fi mânere de fișiere sau mânere de conectare, fără o verificare corespunzătoare. A nu închide în mod corespunzător aceste resurse atunci când ați terminat folosind ele este cel mai comun mod de a atinge aceste limite de resurse.
7. Dereferența indicatorului expirat
În limbi precum C și C ++, memoria poate fi eliberată odată ce ați terminat cu ea. Folosind un pointer O introducere la pointeri pentru programatori O introducere la pointeri pentru programatori Fie că îți dai seama sau nu, marea majoritate a programelor pe care le-ai folosit fac uz de indicii într-un fel. În calitate de programator, trebuie să înțelegeți cum funcționează pointerii. Citește mai mult despre acest bloc de memorie care a fost deja eliberat este o eroare. Acest tip de eroare a fost, de asemenea, în știri din cauza unor întreruperi majore, așa că ați face bine pentru a verifica dacă acest tip de eroare nu se întâmplă în codul dvs..
8. Dereferența indicatorului nul
Un pointer poate avea o valoare nulă înainte ca aceasta să fie inițializată corespunzător (sau după eliberarea memoriei). Derevenirea unui astfel de pointer cauzează o eroare de pointer nulă (numită NullPointerException în Java). Este foarte frecventă în C, C ++, precum și în Java, și este posibilă și în alte limbi. Ar trebui să aveți suficientă atenție în codul dvs. pentru a evita acest tip de eroare.
9. Inițializare lipsă
Variabilele locale sunt cele care sunt declarate într-o funcție (sau un bloc) și încetează să mai existe la sfârșitul funcției. Aceste variabile sunt alocate pe stivă și vor avea gunoi întâmplător atunci când sunt declarate pentru prima dată. În calitate de programator este datoria dvs. să atribuiți acestor valori o valoare adecvată de îndată ce acestea sunt declarate. Utilizarea acestora înainte ca o astfel de inițializare să aibă ca rezultat Lipsă inițializare eroare și se va termina cu siguranță într-un accident (sau ceva mai devastatoare).
A C Exemplu:
int pos; char buffer [] = "salut lume"; // această linie poate imprima gunoi și / sau poate prăbuși programul deoarece pos nu este inițializată. printf ("Valoarea caracterului la pos% d este:% c \ n", pos, tampon [pos]);
10. Algoritm Cryptografic Fragmentat sau Risc
Lumea criptografiei Cum funcționează criptarea și este într-adevăr sigură? Cum funcționează criptarea și este într-adevăr sigură? Citește mai mult este în continuă evoluție. Ceea ce este acceptabil astăzi nu mai poate fi acceptat mâine. Acest lucru s-ar putea datora creșterii puterii computerelor în cazul în care sarcinile de calcul care se presupune că au nevoie de ani de zile ar putea dura câteva minute mâine. Sau cineva găsește un nou mod de a sparge un anumit algoritm care face acest algoritm inutil. Deci, trebuie să păstrați mereu în evidență evoluțiile în criptografie și să actualizați codul (dacă este încă în uz) dacă vulnerabilitățile și hack-urile sunt descoperite în algoritmii pe care îi folosiți.
De exemplu, SHA-1, care este un algoritm de hash, nu mai este recomandat pentru calculul hashes. În 2005, au fost descoperite atacuri împotriva acestui algoritm, iar SHA-2 sau SHA-3 sunt recomandate. Deci, dacă codul dvs. utilizează SHA-1 în orice moment, va trebui să îl înlocuiți cu cel recomandat dacă software-ul este încă utilizat. În caz contrar, aveți riscul ca aplicația dvs. să fie atacată.
rezumat
Am acoperit câteva dintre cele mai comune erori de programare și codificare din acest articol. Puteți consulta această listă frecvent pentru a vă asigura că le evitați.
Ați întâmpinat aceste erori sau alte erori care ar putea duce la o hacking pe scară largă a site-ului sau aplicației dvs.? Spuneți-ne în comentariile de mai jos.
Credit de imagine: ajfile / Depositphotos
Explorați mai multe despre: Hacking.