Lista kontrolna luk w programowaniu stron internetowych
Oglądanie SO come online było dla mnie niezłą nauką. Chciałbym zrobić listę kontrolną różnych vunerabilites i exploitów używanych na stronach internetowych, i jakie techniki programowania mogą być używane do obrony przed nimi.
- Jakie kategorie vunera?
- crashing site
- włamanie do serwera
- włamywanie się do cudzych loginów
- spam
- sockpuppeting , meatpuppeting
- itd...
Jakie techniki programowania defensywnego?
- itd...
9 answers
From the Open Web Application Security Project :
- the OWASP Top Ten vulnerabilities (pdf)
- dla bardziej wyczerpującej listy: Kategoria: podatność
Pierwsza dziesiątka to:
- Cross-Site scripting (XSS)
- błędy wtryskowe (SQL injection, script injection)
- wykonanie złośliwego pliku
- niepewne bezpośrednie odniesienie do obiektu
- Cross-site request forgery (XSRF)
- informacje wyciek i niewłaściwa obsługa błędów
- uszkodzone uwierzytelnianie i zarządzanie sesją
- niepewne przechowywanie kryptograficzne
- niepewna komunikacja
- Brak ograniczenia dostępu do URL
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 22:20:09
Popieram informacje OWASP jako cenne źródło informacji. Mogą być również interesujące, w szczególności wzorce ataków:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 00:23:28
Oczywiście przetestuj każde pole pod kątem luk w zabezpieczeniach:
- SQL-Escape strings (np.
mysql_real_escape_string
) - XSS
- HTML jest drukowany z pól wejściowych (zwykle dobry znak XSS)
- cokolwiek innego, co nie jest konkretnym celem, dla którego zostało utworzone pole
Szukaj nieskończonych pętli (jedyna pośrednia rzecz (jeśli Wiele osób znalazłoby ją przypadkowo), która mogłaby naprawdę zabić serwer).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 19:56:27
Niektóre techniki zapobiegania:
XSS
Jeśli weźmiesz jakieś parametry / dane od użytkownika i kiedykolwiek planujesz je wypisać, czy to w dzienniku, czy na stronie internetowej, wyczyść je (Usuń / Usuń wszystko, co przypomina HTML, cudzysłowy, javascript...) Jeśli wydrukujesz aktualny URI strony w sobie, Wyczyść! Nawet drukowanie PHP_SELF, na przykład, jest niebezpieczne. Dezynfekować! Reflective XSS pochodzi głównie z niezaanalizowanych parametrów strony.
-
Jeśli weźmiesz jakikolwiek wkład od użytkownika i zapisz go lub wydrukuj, ostrzegaj ich, jeśli wykryte zostanie coś niebezpiecznego/nieprawidłowego i poproś o ponowne wprowadzenie. IDS jest dobry do wykrywania (takich jak PHPID.) Następnie odkaż przed przechowywaniem/drukowaniem. Następnie, gdy drukujesz coś z magazynu/bazy danych, odkaż ponownie! Input -> IDS/sanitize -> store -> sanitize - > output
Użyj skanera kodu podczas tworzenia kodu, aby pomóc wykryć potencjalnie podatny kod.
XSRF
- Nigdy nie używaj żądania GET dla destrukcyjne funkcjonalność, czyli kasowanie posta. Zamiast tego, tylko Akceptuj żądania POST. GET ułatwia hackery.
- sprawdzanie referrer, aby upewnić się, że żądanie pochodzi z twojej strony nie praca . Nie jest trudno oszukać referrer.
- Użyj losowego skrótu jako tokenu, który musi być obecny i ważny w każdym żądaniu, a który wygaśnie po pewnym czasie. Wydrukuj token w ukrytym polu formularza i sprawdź go po stronie serwera, gdy formularz jest publikowany. Źli faceci musieliby podaj poprawny token, aby podrobić żądanie, a jeśli udało im się uzyskać prawdziwy token, musi to być przed jego wygaśnięciem.
SQL injection
- twoja klasa abstrakcji ORM lub db powinna mieć metody dezynfekcji-używaj ich zawsze. Jeśli nie używasz klasy abstrakcji ORM lub db... powinieneś.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 08:35:07
SQL injection
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 19:52:18
XSS (Cross Site Scripting) Attacks
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 19:54:12
Łatwy do nadzorowania i łatwy do naprawienia: dezynfekcja danych otrzymanych od strony klienta. Sprawdzanie, czy nie ma elementów takich jak";", może pomóc w zapobieganiu wstrzykiwaniu złośliwego kodu do aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-26 22:29:20
G ' Day,
Dobrym narzędziem analizy statycznej dla bezpieczeństwa jest FlawFinder napisany przez Davida Wheelera. Robi dobrą robotę szukając różnych exploitów bezpieczeństwa,
Nie zastępuje jednak posiadania kogoś, kto zna się na czytaniu Twojego kodu. Jak mówi Dawid na swojej stronie internetowej, " głupiec z narzędziem jest nadal głupcem!"
HTH.
Cheers, Rob
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 14:07:56
Możesz uzyskać dobre dodatki do Firefoksa, aby przetestować wiele wad i luk, takich jak XSS i SQL Injection z kompasu Bezpieczeństwa. Szkoda, że nie działają na Firefoksie 3.0. Mam nadzieję, że wkrótce zostaną one zaktualizowane.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-16 08:43:31