1. Nigdy nie ufać danym pochodzącym od użyszkodnika. Wszystko co
przychodzi od usera (włącznie z user agent, coookies, etc) musi przejść
walidacje aby nie było tak jak na początku kwiatków pokroju XSS w
loginie. Regex + trim, strlen to podstawa.
2. Mechanizm antiflood aby ograniczyć ilość requestów/spamu.
3. Captcha nie zawsze jest dobrym rozwiązaniem (OCR), nawet ta od G,
która po pierwsze zmniejsza dostępność stron dla niewidomych, a po
drugie nadal daje się oszukać.
4. Warto mieć punkt zahaczenia pokroju mail choć to też nie wyeliminuje
catch-all + skryptu z curl’em do otwierania linków do rejestracji stąd
patrz punkt 2.
5. Obecnie prepare statements to podstawa przy wbijaniu danych do db.
6. Limitacja postmaxsize, uploadmaxfilesize, maxfileuploads, etc.
7. Wybić sobie z głowy wywołania systemowe żeby nie narobić szkody.
8. Trzymać wszystko ponad publichtml/privatehtml mimo, że można mieć dobre .htaccess blokujące określone rzeczy to czasami może wystąpić kwiatek.
9. W dobie obecnego sprzętu nie warto używać chociażby md5 nawet z solą per user. bcrypt to podstawa.
10. Zapoznać się z OWASP.
11. Ruch po HTTPS aby nie było man in the middle (patrz również Strict-Transport-Security).
12. Przypięcie zalogowanego usera do IP lub puli, bo session hijacking. Patrz również na session fixation.
13. Logować wszystkie zdarzenia i w razie potrzeby karcić.
14. Plikom przychodzącym od usera należy się dobrze przyjrzeć co do rozszerzenia, nagłówka, etc.
15. Jeżeli robimy include ze zmiennej to należy ją odpowiednio walidować
aby ktoś przez przypadek nie przeglądał zawartości całego serwera.
16. Jeżeli jest to serwer dzielony to warto używać folderu /tmp/ dla
plików/sesji/etc pod swoim kontem aby nikt postronny nie podglądał.
17. Warto się zastanowić czy zezwalać na zewnętrzne grafiki. 12 lat temu
miałem taką zabawę, że wstawiałem avatar ze zdalnego serwera i
podglądałem co poszczególni użytkownicy robią.
18. Zapoznać się z atakami typu CHIRA Attack Vector, Insecure Direct Object References, etc.
19. Optymalizować zapytania aby nie zapchać. Przykładowo varchar(15) dla IP może być UNSIGNED INT – nawet łatwiej się szuka 😉
20. Odpowiednie uprawnienia dla użytkownika db aby nie zrobił kuku vide BENCHMARK(), którą można zrobić DoS’a.
21. Stripować wszystko jak leci chyba, że chcemy XSS.
22. Uważać na serializacje danych.
23. Uważać na XXE.
24. Budować relacyjnie i z odpowiednimi kluczami aby nie zatkać bazy..
25. Uważać na mechanizmy tokenów i „losowych wartości”.
26. Sprawdzać wartości dla paginacji, limity wyświetlania wiadomości bo można jednym machem wszystko oglądać bez ww. mechanizmu.
27. Jeżeli już debugujesz na produkcji to dumpuj zawartość tylko dla siebie.
28. Ustaw odpowiednie errorreporting i displayerrors, bo ścieżki są bardzo pomocne dla potencjalnego dzbana.
29. Backupować aby nie zaliczyć fackupu i nie klękać psychicznie przy restore.
30. Paginacje walidować aby nie było kwiatków, że dając limit 666 666 666 można sobie zrobić dump.
Lista zagrożeń i sposoby na ich uniknięcie

Be First to Comment