strcpy/strncpy

https://chacker.pl/

Polecenie strcpy jest jedną z najniebezpieczniejszych funkcji używanych w C. Format polecenia jest następujący:

strcpy(<miejsce docelowe>, <źródło>);

Celem polecenia jest skopiowanie każdego znaku ciągu źródłowego (seria znaków kończących się znakiem null, \0) do ciągu docelowego. Jest to szczególnie niebezpieczne, ponieważ nie sprawdza się rozmiaru źródła przed jego skopiowaniem do miejsca docelowego. W rzeczywistości mówimy tutaj o nadpisywaniu lokalizacji w pamięci, co zostanie wyjaśnione w dalszej części tego rozdziału. Wystarczy powiedzieć, że gdy źródło jest większe niż miejsce przydzielone na miejsce docelowe, prawdopodobnie wystąpią warunki przepełnienia, co może skutkować kontrolą wykonywania programu. Przy właściwym użyciu bezpieczniejszą alternatywną funkcją jest polecenie strncpy. Tutaj jest format tego polecenia:

strncpy(<miejsce docelowe>, <źródło>, <szerokość>);

Pole <szerokość> służy do zapewnienia, że tylko określona liczba znaków zostanie skopiowana z ciągu źródłowego do ciągu docelowego, co pozwala programiście na większą kontrolę. Parametr szerokości powinien opierać się na rozmiarze miejsca docelowego, takim jak przydzielony bufor. Inną alternatywną funkcją z możliwością kontrolowania rozmiaru i obsługi błędów jest snprintf. Ogólnie rzecz biorąc, obsługa ciągów znaków w języku programowania C była zawsze przedmiotem dyskusji i szczegółowej analizy ze względu na wymagania programisty dotyczące alokacji pamięci.

UWAGA: Używanie nieograniczonych funkcji, takich jak strcpy, jest niebezpieczne; jednakże wiele tradycyjnych kursów programowania nie opisuje wystarczająco szczegółowo zagrożeń stwarzanych przez te funkcje. W rzeczywistości, gdyby programiści po prostu właściwie korzystali z bezpieczniejszych alternatyw, takich jak snprintf, wówczas cała klasa ataków związanych z przepełnieniem bufora byłaby mniej powszechna. Wielu programistów nadal korzysta z tych irytujących funkcji, ponieważ w dalszym ciągu często wykrywane są przepełnienia bufora. Kolejnym częstym problemem jest starszy kod zawierający nieprawidłowe funkcje. Na szczęście większość kompilatorów i systemów operacyjnych obsługuje różne zabezpieczenia łagodzące exploity, które pomagają zapobiegać wykorzystywaniu tego typu luk. To powiedziawszy, nawet funkcje ograniczone mogą ucierpieć z powodu nieprawidłowych obliczeń rozmiaru bufora.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *