Advertisement
Guest User

Untitled

a guest
Jan 14th, 2019
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. Dziś porozmawiamy o błędach związanych z używaniem niepoprawnych typów danych i operacji, które potem mogą prowadzić do błędów bezpieczeństwa.
  2.  
  3. Zacznijmy od prostego przykładu:
  4. for (int i = 0; obj.size(); i++)
  5. Często widzę taką konstrukcję pętli niezależnie od języka. Co gorsza dla przykładu taka Java potrafi zwracać typ int w przypadku size(). No ale czemu? Kontenery w których trzymamy różne dane nie będą mieć przecież ujemnej wartości. Więc czemu używać int, a nie uint? Taki C++ wypada lepiej bo zwraca typ bez znaku (size_t) co jest ok, ale mimo to większość i tak używa int w pętli i mamy już problem, czyli porównywanie dwóch różnych typów. Kompilatory generują warning, ale kto tym się przejmuje... Zatem jak powinno to poprawnie wyglądać? Wystarczy użyć for-each, albo iteratorów, a jeśli język tego nie wspiera to użyć poprawnych typów.
  6.  
  7. To samo dotyczy alokowania pamięci:
  8. int size; // a powinno być uint/size_t
  9. new int[size];
  10.  
  11. Jaki z tego morał? Używać właściwych typów, a jeśli język oferuje możliwość to korzystać z typów w stylu u8, u16, u32, u64, i8, i16, i32, i64. Wtedy od razu wiadomo czy jest typ ze znakiem i ilu bitowy jest.
  12.  
  13. Na koniec w prosty sposób pokażę jak porównywanie złych typów może prowadzić do błędów bezpieczeństwa:
  14. if (strcmp($password, $_POST["password"]) == 0)
  15. Kod w php i czy na pierwszy rzut oka widać, że jest coś nie tak? Dokumentacja php mówi nam, że zwróci 0 jeśli obie wartości są równe. Problemem jest tutaj porównanie, które nie sprawdza typów. Teraz wystarczy przesłać tablicę i będziemy zalogowani bez znajomości hasła. A wystarczyło użyć ===.
  16.  
  17. W ramach ciekawostki bo może nie wszyscy to pamiętają, niektóre programy miały limit pliku do 2 GB, a było to związane z użyciem niewłaściwego typu int32 zamiast uint32 wtedy byłby limit 4 GB.
  18.  
  19. Podsumowując używajmy właściwych typów i operacji zawsze i wszędzie.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement