
Joseph Goodman
0
2955
359
Oto niektóre z najczęstszych błędów programistycznych i programistycznych popełnianych przez programistów. Błędy te doprowadziły do powszechnych awarii, kradzieży danych, włamań i nie tylko. Niektóre z 10 najpopularniejszych stron internetowych z kodami błędów i rozwiązywaniem problemów 10 najpopularniejszych stron internetowych z kodami błędów i rozwiązywaniem problemów dotyczą niektórych języków, takich jak C, C ++ itp., Ale niektóre są wspólne dla innych języków, takich jak Java, JavaScript, Python itp..
Zalecamy częste sprawdzanie tej listy, aby upewnić się, że nie zawiera się żadnej z nich w kodzie. Ta lista jest posortowana w kolejności ważności od góry do dołu.
1. Przepełnienie bufora
Przepełnienie bufora występuje, gdy dane są zapisywane w buforze po jego zakończeniu. Może powstać z powodu błędnych obliczeń pozycji zapisu. Lub ciągłe zapisywanie w buforze bez sprawdzania długości. Niezależnie od przyczyny, ten błąd jest jednym z najczęstszych i spowodował poważne exploity. Niektóre z nich obejmują wirusy komputerowe Morris Internet Worm 6, które zmieniły świat 6 wirusów komputerowych, które zmieniły świat Wczoraj spojrzeliśmy na niektóre z najbardziej szkodliwych wirusów komputerowych w historii, a dziś będziemy badać niektóre z tym bardziej niejasne. Termin “wirus” nie był dołączony do złośliwego oprogramowania… w 1988 r., robaka W32 / Nimda w 2001 r. i błędu Sendmail w 2003 r.
A C Przykład:
char array [6] = "hello"; strcat (tablica, „, joe”); / * <- This line causes a buffer overflow. */
Zdjęcie: Cyber4All @Towson
2. Zastrzyk SQL
Zastrzyk SQL Co to jest zastrzyk SQL? [MakeUseOf wyjaśnia] Co to jest zastrzyk SQL? [MakeUseOf wyjaśnia] Świat bezpieczeństwa internetowego jest nękany otwartymi portami, tylnymi drzwiami, dziurami w zabezpieczeniach, trojanami, robakami, lukami w zaporze ogniowej i mnóstwem innych problemów, które utrzymują nas wszystkich na nogi. Dla użytkowników prywatnych… to technika wprowadzania poleceń SQL do danych wejściowych użytkownika, dzięki czemu te polecenia są bezpośrednio wykonywane przez bazę danych. Dzięki temu atakujący może wykonywać złośliwe działania, takie jak usuwanie tabel, usuwanie baz danych, kradzież danych i wiele więcej.
Kluczową przyczyną powodzenia ataków SQL Injection jest to, że oprogramowanie przetwarzające dane wejściowe użytkownika wykonuje niewystarczające kontrole i sprawdzanie poprawności danych wejściowych przed przekazaniem ich do bazy danych w celu wykonania.
Przykład Java:
// Poniżej podano wartość parametru z iniekcją SQL Ciąg nazwa użytkownika = "Joe"; usuń z użytkownika, gdzie nazwa użytkownika, np. "%"; Połączenie con =…; // utwórz połączenie z bazą danych // Po wykonaniu tej instrukcji wszyscy użytkownicy zostaną usunięci z bazy danych. con.createStatement (). execute („aktualizacja zestawu użytkowników logged_in = 1 gdzie nazwa użytkownika =„ + nazwa użytkownika + ””);
3. Zastrzyk poleceń systemu operacyjnego
Wprowadzanie poleceń systemu operacyjnego powstaje, gdy dane wejściowe określone przez użytkownika są przekazywane bezpośrednio do systemu operacyjnego w celu wykrycia przez aplikację bez odpowiedniego sprawdzania. Taka operacja może zostać wykorzystana przez aplikację w celu użycia istniejącej komendy w systemie operacyjnym. Gdy aplikacja przekazuje dane wejściowe użytkownika bez ich poprawnego sprawdzenia, toruje drogę napastnikowi do użycia sprytnych konstrukcji w celu wykonania złośliwych poleceń. Poleceniami tymi mogą być na przykład usuwanie plików, kradzież danych, zmiana uprawnień do plików i inne.
4. Przepełnienie lub ominięcie liczb całkowitych
Liczba całkowita Podstawy programowania komputerowego 101 - Zmienne i typy danych Podstawy programowania komputerowego 101 - Zmienne i typy danych Po wprowadzeniu i omówieniu trochę programowania obiektowego przed i skąd pochodzi jego nazwa, myślałem, że nadszedł czas, aby przejść przez absolutne podstawy programowania w sposób inny niż język. Ten… błąd przepełnienia występuje, gdy próbujesz zapisać większą wartość w typie integralnym, niż pasuje. Kiedy tak się dzieje, większa wartość zostaje obcięta, a operacja kończy się zapisaniem nieprzewidywalnego wyniku. Na przykład 2-bajtowe krótkie bez znaku mogą przechowywać maksymalną wartość 65535. Teraz wyobraź sobie dodanie dwóch krótkich wartości, takich jak 65530 i 10, i zapisanie wyniku w krótkim. Wynik (65545) nie zmieści się w krótkim, pozostawiając nieprzewidywalną wartość w celu krótkim w wyniku obcięcia. Gdy następnie użyjesz tej wartości w innej operacji (takiej jak indeks tablicy), skończysz nieprzewidywalnymi wynikami.
A C Przykład:
krótkie a = 65530, b = 10; krótkie c = a + b; // na moim komputerze, c ma nieoczekiwaną wartość: 4
5. Nieprawidłowa walidacja indeksu tablicy
Innym bardzo częstym błędem występującym w oprogramowaniu jest Nieprawidłowa walidacja indeksu tablicy. Powstaje podczas uzyskiwania dostępu do tablicy. Jak tablice i listy działają w Pythonie Jak tablice i listy działają w Pythonie Tablice i listy są jednymi z najbardziej przydatnych struktur danych w programowaniu - chociaż niewiele osób wykorzystuje je w pełni. za pomocą indeksu, który leży poza granicami tablicy. Gdy uzyskujesz dostęp do lokalizacji poza prawidłowymi granicami danych programu, pojawia się błąd dostępu do pamięci (znany również jako naruszenie segmentacji). Gdy lokalizacja pamięci leży w granicach danych, ale poza tablicą, patrzysz na uszkodzenie pamięci podczas pisania w takich lokalizacjach.
Tego typu błędy występują częściej w C i C ++, ale mogą wystąpić w dowolnym języku, nawet w przypadku automatycznego zarządzania pamięcią, takiego jak Java, JavaScript, Python itp. Jedynym sposobem, w jaki można złagodzić takie błędy w oprogramowaniu, jest programista, zachowując wystarczającą ostrożność podczas kodowania.
6. Przydzielaj zasoby bez ograniczeń
Alokacja pamięci jest bardzo powszechna w C i C ++, ponieważ zarządzanie pamięcią w tych językach jest ręczne. Przydzielenie pamięci bez prawidłowego sprawdzenia przydzielonego rozmiaru może spowodować niepowodzenie alokacji. Gdy wynik tej alokacji nie zostanie sprawdzony, ale wykorzystany bezpośrednio, masz przepis na katastrofę.
Tego rodzaju błędy są również możliwe bez ręcznego zarządzania pamięcią, takiego jak Java, JavaScript i Python podczas przydzielania tablic. Dlatego należy zachować odpowiednią ostrożność przy przydzielaniu tablic w tych językach.
Inną możliwością wystąpienia tego błędu jest tworzenie innych zasobów, takich jak uchwyty plików lub uchwyty połączeń bez odpowiedniego sprawdzania. Niepoprawne zamknięcie tych zasobów po ich użyciu jest najczęstszym sposobem osiągnięcia tych limitów zasobów.
7. Wygasła dereferencja wskaźnika
W językach takich jak C i C ++ pamięć można zwolnić po zakończeniu pracy. Korzystanie ze wskaźnika Wprowadzenie do wskaźników dla programistów Wprowadzenie do wskaźników dla programistów Bez względu na to, czy zdajesz sobie z tego sprawę, czy nie, zdecydowana większość używanych programów w jakiś sposób korzysta ze wskaźników. Jako programista musisz zrozumieć, jak działają wskaźniki. do tego bloku pamięci, który został już zwolniony, jest błąd. Ten rodzaj błędu pojawił się również w wiadomościach z powodu poważnych awarii, dlatego dobrze byłoby sprawdzić, czy tego rodzaju błąd nie występuje w kodzie.
8. Dereferencja wskaźnika zerowego
Wskaźnik może mieć wartość zerową, zanim zostanie poprawnie zainicjowany (lub po zwolnieniu pamięci). Dereferencje takiego wskaźnika powodują błąd wskaźnika zerowego (wywoływany NullPointerException w Javie). Jest to bardzo powszechne w C, C ++, a także Javie, i zdecydowanie możliwe również w innych językach. Należy zachować odpowiednią ostrożność w kodzie, aby uniknąć tego rodzaju błędów.
Źródło zdjęcia: J.T. Presta
9. Brak inicjalizacji
Zmienne lokalne to te, które są zadeklarowane w funkcji (lub bloku) i przestają istnieć na końcu funkcji. Te zmienne są przydzielane na stosie i będą miały losowe śmieci, gdy zostaną zadeklarowane po raz pierwszy. Jako programista Twoim obowiązkiem jest przypisać odpowiednią wartość do tych zmiennych, gdy tylko zostaną zadeklarowane. Używanie ich przed taką inicjalizacją powoduje Brak inicjalizacji błąd i na pewno zakończy się awarią (lub czymś bardziej niszczącym).
A C Przykład:
int pos; char buffer [] = "hello world"; // ta linia może wypisać śmieci i / lub spowodować awarię programu, ponieważ pos nie został zainicjowany. printf („Wartość znaku w pozycji% d wynosi:% c \ n”, pos, bufor [pos]);
10. Złamany lub ryzykowny algorytm kryptograficzny
Świat kryptografii Jak działa szyfrowanie i czy jest naprawdę bezpieczne? Jak działa szyfrowanie i czy jest naprawdę bezpieczne? stale się rozwija. To, co jest dziś akceptowane, może już nie być jutro akceptowane. Może to wynikać z rosnącej mocy komputerów, w przypadku których zadania obliczeniowe, które według przewidywań trwają lata, jutro mogą zająć minuty. Albo ktoś znajdzie nowy sposób na złamanie określonego algorytmu, który czyni ten algorytm bezużytecznym. Musisz więc na bieżąco śledzić rozwój kryptografii i aktualizować kod (jeśli nadal jest używany), jeśli w wykorzystywanych algorytmach zostaną wykryte luki i włamania..
Na przykład SHA-1, który jest algorytmem mieszającym, nie jest już zalecany do obliczania skrótów. W 2005 r. Wykryto ataki na ten algorytm i zalecane są SHA-2 lub SHA-3. Więc jeśli twój kod używa SHA-1 w dowolnym momencie, będziesz musiał go zastąpić zalecanym, jeśli oprogramowanie jest nadal używane. W przeciwnym razie istnieje ryzyko, że aplikacja będzie otwarta na atak.
streszczenie
W tym artykule omówiliśmy kilka najczęstszych błędów programowania i kodowania. Możesz często odwoływać się do tej listy, aby upewnić się, że ich unikasz.
Czy natrafiłeś na te lub inne błędy, które mogą prowadzić do włamania na dużą skalę Twojej witryny lub aplikacji? Daj nam znać w komentarzach poniżej.
Źródło obrazu: ajfile / Depositphotos