O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Testowanie bezpieczeństwa aplikacji internetowych. Receptury

Book Description

Książka Testowanie bezpieczeństwa aplikacji internetowych. Receptury to napisany zrozumiałym językiem podręcznik, dzięki któremu szybko poznasz mechanizmy testowania zabezpiecze...

Table of Contents

  1. Testowanie bezpieczeństwa aplikacji internetowych
  2. Opinie o książce „Testowanie bezpieczeństwa aplikacji internetowych. Receptury”
  3. Słowo wstępne
  4. Przedmowa
    1. Dla kogo jest ta książka?
    2. Darmowe narzędzia
    3. O okładce
    4. Organizacja
    5. Część pierwsza: podstawy
    6. Część druga: techniki testowania
    7. Część trzecia: techniki zaawansowane
    8. Konwencje stosowane w książce
      1. Konwencje typograficzne
      2. Konwencje stosowane w przykładach
    9. Wykorzystywanie przykładowego kodu
    10. Podziękowania
      1. Paco Hope
      2. Ben Walther
      3. Nasi korektorzy
      4. O’Reilly
  5. 1. Wprowadzenie
    1. 1.1. Co to jest testowanie zabezpieczeń?
      1. Dostarczanie dowodu
      2. Spełnianie wymagań
      3. Testowanie zabezpieczeń to więcej niż testowanie
        1. Wartości graniczne
        2. Klasy równoważności
        3. Klasy bezpieczeństwa
    2. 1.2. Czym są aplikacje internetowe?
      1. Terminologia
      2. Podstawowe informacje o HTTP
        1. HTTP jest protokołem klient-serwer
        2. HTTP jest protokołem bezstanowym
        3. HTTP jest protokołem tekstowym
    3. 1.3. Podstawowe pojęcia dotyczące aplikacji internetowych
      1. Bloki budulcowe
        1. Stos technologii
      2. Struktura aplikacji internetowych
        1. Typowe komponenty
        2. Jednowarstwowe aplikacje internetowe
        3. Dwuwarstwowe aplikacje internetowe
        4. Trójwarstwowe aplikacje internetowe
        5. Wpływ warstw na testowanie
    4. 1.4. Testowanie zabezpieczeń aplikacji internetowej
    5. 1.5. Zasadnicze pytanie brzmi: „Jak”
      1. „Jak”, a nie „dlaczego”
      2. „Jak”, a nie „jakie dane”
      3. „Jak”, a nie „gdzie”
      4. „Jak”, a nie „kto”
      5. „Jak”, a nie „kiedy”
      6. Bezpieczeństwo oprogramowania, a nie bezpieczeństwo informatyczne
  6. 2. Instalacja darmowych narzędzi
    1. 2.1. Instalacja przeglądarki Firefox
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 2.2. Instalacja rozszerzeń przeglądarki Firefox
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 2.3. Instalacja rozszerzenia Firebug
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 2.4. Instalacja programu WebScarab grupy OWASP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 2.5. Instalowanie Perla i pakietów w systemie Windows
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 2.6. Instalacja Perla i korzystanie z repozytorium CPAN w systemie Linux
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 2.7. Instalacja narzędzia CAL9000
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 2.8. Instalacja narzędzia ViewState Decoder
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 2.9. Instalacja cURL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 2.10. Instalacja narzędzia Pornzilla
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 2.11. Instalacja środowiska Cygwin
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 2.12. Instalacja narzędzia Nikto 2
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 2.13. Instalacja zestawu narzędzi Burp Suite
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    14. 2.14. Instalacja serwera HTTP Apache
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  7. 3. Prosta obserwacja
    1. 3.1. Przeglądanie źródła HTML strony
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 3.2. Zaawansowane przeglądanie kodu źródłowego
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 3.3. Obserwacja nagłówków żądań „na żywo” za pomocą dodatku Firebug
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 3.4. Obserwacja danych POST „na żywo” za pomocą narzędzia WebScarab
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 3.5. Oglądanie ukrytych pól formularza
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 3.6. Obserwacja nagłówków odpowiedzi „na żywo” za pomocą dodatku TamperData
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 3.7. Podświetlanie kodu JavaScript i komentarzy
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 3.8. Wykrywanie zdarzeń JavaScript
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 3.9. Modyfikowanie specyficznych atrybutów elementów
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 3.10. Dynamiczne śledzenie atrybutów elementów
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 3.11. Wnioski
  8. 4. Kodowanie danych w internecie
    1. 4.1. Rozpoznawanie binarnych reprezentacji danych
      1. Problem
      2. Rozwiązanie
        1. Dane szesnastkowe
        2. Dane ósemkowe
        3. Base36
      3. Dyskusja
    2. 4.2. Korzystanie z danych Base64
      1. Problem
      2. Rozwiązanie
        1. Dekodowanie ciągu
        2. Kodowanie całej zawartości pliku
        3. Kodowanie prostego ciągu znaków
      3. Dyskusja
        1. Rozpoznawanie kodowania Base64
        2. Inne narzędzia
    3. 4.3. Konwersja liczb zakodowanych w Base36 na stronie WWW
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 4.4. Korzystanie z danych Base36 w Perlu
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 4.5. Wykorzystanie danych kodowanych w URL
      1. Problem
      2. Rozwiązanie
        1. Kodowanie
        2. Dekodowanie
      3. Dyskusja
    6. 4.6. Wykorzystywanie danych w formacie encji HTML
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
        1. Różne odmiany encji HTML
    7. 4.7. Wyliczanie skrótów
      1. Problem
      2. Rozwiązanie
        1. MD5
        2. SHA-1
      3. Dyskusja
        1. Skróty MD5
        2. Skróty SHA-1
    8. 4.8. Rozpoznawanie formatów czasowych
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 4.9. Programowe kodowanie wartości oznaczających czas
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 4.10. Dekodowanie wartości ViewState języka ASP.NET
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 4.11. Dekodowanie danych zakodowanych wielokrotnie
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  9. 5. Manipulowanie danymi wejściowymi
    1. 5.1. Przechwytywanie i modyfikowanie żądań POST
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 5.2. Obejścia ograniczeń pól wejściowych
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 5.3. Modyfikowanie adresu URL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 5.4. Automatyzacja modyfikowania adresów URL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 5.5. Testowanie obsługi długich adresów URL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 5.6. Edycja plików cookie
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 5.7. Fałszowanie informacji przesyłanych przez przeglądarki w nagłówkach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 5.8. Przesyłanie na serwer plików o złośliwych nazwach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
        1. Wstrzykiwanie kodu
    9. 5.9. Przesyłanie na serwer plików o dużej objętości
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 5.10. Przesyłanie plików XML o złośliwej zawartości
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 5.11. Przesyłanie plików XML o złośliwej strukturze
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 5.12. Przesyłanie złośliwych plików ZIP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 5.13. Przesyłanie na serwer przykładowych plików wirusów
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    14. 5.14. Obchodzenie ograniczeń interfejsu użytkownika
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  10. 6. Automatyzacja masowego skanowania
    1. 6.1. Przeglądanie serwisu WWW za pomocą programu WebScarab
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 6.2. Przekształcanie wyników działania programów typu pająk do postaci listy inwentaryzacyjnej
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 6.3. Redukowanie listy adresów URL do testowania
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 6.4. Wykorzystanie arkusza kalkulacyjnego do redukcji listy
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 6.5. Tworzenie kopii lustrzanej serwisu WWW za pomocą programu LWP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 6.6. Tworzenie kopii lustrzanej serwisu WWW za pomocą polecenia wget
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 6.7. Tworzenie kopii lustrzanej specyficznych elementów za pomocą polecenia wget
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 6.8. Skanowanie serwisu WWW za pomocą programu Nikto
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 6.9. Interpretacja wyników programu Nikto
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 6.10. Skanowanie serwisów HTTPS za pomocą programu Nikto
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 6.11. Używanie programu Nikto z uwierzytelnianiem
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 6.12. Uruchamianie Nikto w określonym punkcie startowym
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 6.13. Wykorzystywanie specyficznego pliku cookie sesji z programem Nikto
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    14. 6.14. Testowanie usług sieciowych za pomocą programu WSFuzzer
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    15. 6.15. Interpretacja wyników programu WSFuzzer
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  11. 7. Automatyzacja wybranych zadań z wykorzystaniem cURL
    1. 7.1. Pobieranie strony za pomocą cURL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 7.2. Pobieranie wielu odmian strony spod adresu URL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 7.3. Automatyczne śledzenie przekierowań
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 7.4. Wykorzystanie cURL do testowania podatności na ataki za pomocą skryptów krzyżowych
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 7.5. Wykorzystanie cURL do testowania podatności na ataki typu „przechodzenie przez katalog”
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 7.6. Naśladowanie specyficznego typu przeglądarki lub urządzenia
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
        1. Dostarczanie spersonalizowanej zawartości
        2. Reakcje na nagłówek User-Agent są rzadkie
    7. 7.7. Interaktywne naśladowanie innego urządzenia
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 7.8. Imitowanie wyszukiwarki za pomocą cURL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 7.9. Pozorowanie przepływu poprzez fałszowanie nagłówków referer
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 7.10. Pobieranie samych nagłówków HTTP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 7.11. Symulacja żądań POST za pomocą cURL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 7.12. Utrzymywanie stanu sesji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 7.13. Modyfikowanie plików cookie
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    14. 7.14. Przesyłanie pliku na serwer za pomocą cURL
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    15. 7.15. Tworzenie wieloetapowego przypadku testowego
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
        1. Uwagi na temat działania skryptu
        2. Pobierane strony
        3. W jaki sposób można utworzyć skrypt dla tego testu?
    16. 7.16. Wnioski
  12. 8. Automatyzacja zadań z wykorzystaniem biblioteki LibWWWPerl
    1. 8.1. Napisanie prostego skryptu Perla do pobierania strony
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 8.2. Programowe modyfikowanie parametrów
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 8.3. Symulacja wprowadzania danych za pośrednictwem formularzy z wykorzystaniem żądań POST
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 8.4. Przechwytywanie i zapisywanie plików cookie
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 8.5. Sprawdzanie ważności sesji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
        1. Nieprawidłowa utrata ważności sesji
    6. 8.6. Testowanie podatności na wymuszenia sesji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 8.7. Wysyłanie złośliwych wartości w plikach cookie
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 8.8. Przesyłanie na serwer złośliwej zawartości plików
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 8.9. Przesyłanie na serwer plików o złośliwych nazwach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 8.10. Przesyłanie wirusów do aplikacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 8.11. Parsowanie odpowiedzi za pomocą skryptu Perla w celu sprawdzenia odczytanych wartości
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 8.12. Programowa edycja strony
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 8.13. Wykorzystanie wątków do poprawy wydajności
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  13. 9. Wyszukiwanie wad projektu
    1. 9.1. Pomijanie obowiązkowych elementów nawigacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 9.2. Próby wykonywania uprzywilejowanych operacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 9.3. Nadużywanie mechanizmu odzyskiwania haseł
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 9.4. Nadużywanie łatwych do odgadnięcia identyfikatorów
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 9.5. Odgadywanie danych do uwierzytelniania
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 9.6. Wyszukiwanie liczb losowych w aplikacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 9.7. Testowanie liczb losowych
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 9.8. Nadużywanie powtarzalności
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 9.9. Nadużywanie operacji powodujących duże obciążenia
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 9.10. Nadużywanie funkcji ograniczających dostęp do aplikacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 9.11. Nadużywanie sytuacji wyścigu
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  14. 10. Ataki przeciwko aplikacjom AJAX
    1. 10.1. Obserwacja żądań AJAX „na żywo”
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 10.2. Identyfikacja kodu JavaScript w aplikacjach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 10.3. Śledzenie operacji AJAX do poziomu kodu źródłowego
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 10.4. Przechwytywanie i modyfikowanie żądań AJAX
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 10.5. Przechwytywanie i modyfikowanie odpowiedzi serwera
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 10.6. Wstrzykiwanie danych do aplikacji AJAX
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 10.7. Wstrzykiwanie danych w formacie XML do aplikacji AJAX
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 10.8. Wstrzykiwanie danych w formacie JSON do aplikacji AJAX
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 10.9. Modyfikowanie stanu klienta
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 10.10. Sprawdzenie możliwości dostępu z innych domen
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 10.11. Odczytywanie prywatnych danych dzięki przechwytywaniu danych JSON
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  15. 11. Manipulowanie sesjami
    1. 11.1. Wyszukiwanie identyfikatorów sesji w plikach cookie
      1. Problem
      2. Rozwiązanie
    2. 11.2. Wyszukiwanie identyfikatorów sesji w żądaniach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 11.3. Wyszukiwanie nagłówków autoryzacji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 11.4. Analiza terminu ważności sesji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 11.5. Analiza identyfikatorów sesji za pomocą programu Burp
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 11.6. Analiza losowości sesji za pomocą programu WebScarab
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 11.7. Zmiany sesji w celu uniknięcia ograniczeń
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 11.8. Podszywanie się pod innego użytkownika
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 11.9. Preparowanie sesji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 11.10. Testowanie pod kątem podatności na ataki CSRF
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  16. 12. Testy wielostronne
    1. 12.1. Wykradanie plików cookie za pomocą ataków XSS
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    2. 12.2. Tworzenie nakładek za pomocą ataków XSS
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    3. 12.3. Tworzenie żądań HTTP za pomocą ataków XSS
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    4. 12.4. Interaktywne wykonywanie ataków XSS bazujących na modelu DOM
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    5. 12.5. Pomijanie ograniczeń długości pola (XSS)
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    6. 12.6. Interaktywne przeprowadzanie ataków XST
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    7. 12.7. Modyfikowanie nagłówka Host
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    8. 12.8. Odgadywanie nazw użytkowników i haseł metodą siłową
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    9. 12.9. Interaktywne przeprowadzanie ataków wstrzykiwania kodu w instrukcji włączania skryptów PHP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    10. 12.10. Tworzenie bomb dekompresji
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    11. 12.11. Interaktywne przeprowadzanie ataków wstrzykiwania poleceń systemu operacyjnego
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    12. 12.12. Systemowe przeprowadzanie ataków wstrzykiwania poleceń systemu operacyjnego
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    13. 12.13. Interaktywne przeprowadzanie ataków wstrzykiwania instrukcji XPath
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    14. 12.14. Interaktywne przeprowadzanie ataków wstrzykiwania SSI
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    15. 12.15. Systemowe przeprowadzanie ataków wstrzykiwania SSI
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    16. 12.16. Interaktywne przeprowadzanie ataków wstrzykiwania LDAP
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
    17. 12.17. Interaktywne przeprowadzanie ataków wstrzykiwania zapisów w dziennikach
      1. Problem
      2. Rozwiązanie
      3. Dyskusja
  17. A. O autorach
  18. Indeks
  19. About the Authors
  20. Kolofon
  21. Copyright