--- marp: true theme: default paginate: true size: 16:9 style: | section { font-size: 24px; } section h1 { color: #1a5276; } section h2 { color: #2980b9; } section table { font-size: 20px; } section small { font-size: 18px; } --- # Wykład 15 ## Bezpieczeństwo systemów CMS i podsumowanie **Systemy Zarządzania Treścią** Politechnika Poznańska --- # Część 1 ## Bezpieczeństwo systemów CMS --- ## Dlaczego CMS są celem ataków? Systemy CMS są szczególnie narażone na ataki z kilku powodów: | Powód | Opis | |---|---| | **Popularność** | Popularne CMS (WordPress) to cel dla masowych ataków | | **Wtyczki** | Tysiące wtyczek o zróżnicowanej jakości | | **Znany kod** | Open-source = kod znany atakującym | | **Brak aktualizacji** | Nieaktualizowane instalacje z lukami | | **Domyślna konfiguracja** | Słabe hasła, domyślne ustawienia | > Najczęstsza przyczyna włamań to **nie złośliwość kodu, lecz zaniedbania**: brak aktualizacji, słabe hasła, nieprzemyślane wtyczki. --- ## Triada CIA w kontekście CMS Przypomnienie trzech fundamentalnych właściwości bezpieczeństwa: | Właściwość | Znaczenie w CMS | Przykład naruszenia | |---|---|---| | **Poufność** | Treści widoczne tylko dla uprawnionych | Wyciek nieopublikowanych artykułów | | **Integralność** | Treści nie mogą być zmienione bez autoryzacji | Defacement strony | | **Dostępność** | Serwis dostępny dla użytkowników | Atak DDoS | > Wszystkie mechanizmy bezpieczeństwa CMS służą ochronie tych trzech właściwości. --- ## Uwierzytelnianie i autoryzacja w CMS | Pojęcie | W CMS | Przykład | |---|---|---| | **Uwierzytelnianie** | Weryfikacja tożsamości użytkownika | Login + hasło, 2FA, SSO | | **Autoryzacja** | Nadawanie praw dostępu | Role: admin, redaktor, autor, czytelnik | ### Zasada najmniejszych przywilejów (PoLP) > Każdy użytkownik powinien mieć **tylko te uprawnienia**, które są niezbędne do wykonywania jego zadań. ### Role w CMS | Rola | Uprawnienia | |---|---| | **Administrator** | Pełny dostęp | | **Redaktor** | Publikacja i edycja | | **Autor** | Własne treści | | **Czytelnik** | Tylko odczyt | --- # Część 2 ## OWASP Top 10 w kontekście CMS --- ## OWASP Top 10 — najczęstsze zagrożenia OWASP (Open Web Application Security Project) publikuje listę **10 najczęstszych zagrożeń** aplikacji webowych: | # | Zagrożenie | Przykład w CMS | |---|---|---| | 1 | **Broken Access Control** | Użytkownik zmienia rolę w formularzu | | 2 | **Cryptographic Failures** | Hasła w plaintext | | 3 | **Injection** | SQL injection przez wyszukiwarkę | | 4 | **Insecure Design** | Domyślne hasło admina | | 5 | **Security Misconfiguration** | Plik konfiguracyjny publicznie dostępny | | 6 | **Vulnerable Components** | Niezaktualizowana wtyczka | | 7 | **Auth Failures** | Brak 2FA, słabe hasła | | 8 | **Data Integrity Failures** | Brak backupów | | 9 | **Logging Failures** | Brak logów i monitoringu | | 10 | **SSRF** | Fałszowanie żądań po stronie serwera | --- ## Injection — SQL Injection **SQL Injection** to wstrzyknięcie złośliwego kodu SQL przez dane wejściowe. ### Przykład podatności ```sql -- Zapytanie zbudowane przez konkatenację SELECT * FROM users WHERE name = '$user_input'; ``` Gdy `$user_input` = `' OR '1'='1`: ```sql SELECT * FROM users WHERE name = '' OR '1'='1'; -- Zwraca wszystkich użytkowników! ``` ### Ochrona | Metoda | Opis | |---|---| | **Prepared statements** | Parametryzowane zapytania | | **Walidacja danych** | Sprawdzanie danych wejściowych | | **Escaping** | Ucieczka znaków specjalnych | --- ## XSS — Cross-Site Scripting **XSS** to wstrzyknięcie złośliwego skryptu, który wykonuje się w przeglądarce ofiary. ### Typy XSS | Typ | Opis | |---|---| | **Stored (trwały)** | Złośliwy skrypt zapisany w bazie (np. w komentarzu) | | **Reflected (odbity)** | Skrypt odbity od parametru URL | | **DOM-based** | Skrypt manipulujący DOM | ### Ochrona | Metoda | Opis | |---|---| | **Escaping wyjścia** | Ucieczka znaków HTML | | **CSP (Content Security Policy)** | Ograniczenie źródeł skryptów | | **Walidacja wejścia** | Odrzucanie niebezpiecznych danych | --- ## CSRF — Cross-Site Request Forgery **CSRF** to zmuszenie zalogowanego użytkownika do wykonania niechcianej akcji. ### Przykład Złośliwa strona zawiera ukryty formularz, który wysyła żądanie do CMS w imieniu zalogowanego użytkownika (np. zmiana hasła). ### Ochrona | Metoda | Opis | |---|---| | **Tokeny CSRF** | Unikalny token w formularzu | | **SameSite cookies** | Ograniczenie wysyłania cookies | | **Weryfikacja nagłówków** | Sprawdzanie Origin/Referer | --- ## Typowe ataki na CMS — przegląd | Atak | Opis | Ochrona | |---|---|---| | **Brute force** | Zgadywanie haseł | Limit prób, 2FA, captcha | | **Defacement** | Zmiana wyglądu strony | Integralność, backupy | | **DDoS** | Przeciążenie serwera | CDN, firewall, rate limiting | | **Malware** | Złośliwe oprogramowanie | Skanowanie, aktualizacje | | **Phishing** | Wyłudzenie danych | Edukacja, 2FA | | **Przejęcie konta** | Kradzież sesji | Secure cookies, HTTPS | --- # Część 3 ## Dobre praktyki bezpieczeństwa CMS --- ## Dobre praktyki — aktualizacje i hasła ### Aktualizacje - **Regularnie aktualizuj** CMS, motywy i wtyczki, - Śledź **biuletyny bezpieczeństwa**, - Usuwaj **nieużywane wtyczki** (zmniejszają powierzchnię ataku). ### Polityka haseł | Zasada | Opis | |---|---| | **Silne hasła** | Długie, złożone, unikatowe | | **2FA** | Dwuskładnikowe uwierzytelnianie | | **Zmiana domyślnych** | Natychmiast po instalacji | | **Limit prób** | Blokowanie po N nieudanych logowaniach | ### Uprawnienia - Zasada **najmniejszych przywilejów**, - Regularny **przegląd kont** i uprawnień, - **Indywidualne konta** (nie wspólne). --- ## Dobre praktyki — konfiguracja i backupy ### Konfiguracja | Element | Zalecenie | |---|---| | **HTTPS** | Szyfrowanie komunikacji | | **Pliki konfiguracyjne** | Poza publicznym katalogiem | | **Uprawnienia plików** | Minimalne uprawnienia | | **Wyłączenie zbędnych** | Usunięcie nieużywanych funkcji | ### Backupy | Zasada | Opis | |---|---| | **Regularność** | Automatyczne, harmonogramowane | | **Redundancja** | Kopie w różnych lokalizacjach | | **Testowanie** | Sprawdzanie przywracania | | **Wersjonowanie** | Historia kopii | > Backupy to **ostatnia linia obrony** — pozwalają odzyskać system po ataku. --- ## Audyt bezpieczeństwa OWASP Audyt bezpieczeństwa (wymieniony w programie przedmiotu) to systematyczna ocena podatności: ### Zakres audytu | Obszar | Co sprawdzamy | |---|---| | **Uwierzytelnianie** | Mechanizmy logowania, 2FA | | **Autoryzacja** | Role i uprawnienia | | **Walidacja danych** | SQL injection, XSS | | **Konfiguracja** | Błędne ustawienia | | **Zależności** | Podatne komponenty | | **Logi** | Monitoring i audyt | ### Narzędzia - skanery podatności (np. OWASP ZAP), - testy penetracyjne, - przegląd kodu. ### Wynik Raport z listą podatności, ich wagą i rekomendacjami naprawy. --- # Część 4 ## Podsumowanie kursu --- ## Mapa kursu — 15 wykładów | # | Temat | Kluczowe zagadnienia | |---|---|---| | 1 | Wprowadzenie do CMS | Pojęcia, treść, architektura, komponenty | | 2 | Systemy zarządzania dokumentami | Uniwersalność, dowiązania, wersjonowanie | | 3 | XML — podstawy | Struktura, poprawność, encje, Unicode | | 4 | DTD | Definiowanie typów dokumentów | | 5 | XML Schema — podstawy | Elementy, atrybuty, typy | | 6 | XML Schema — przestrzenie nazw | Namespace'y, składanie schematów | | 7 | XML Schema — typy | Wyprowadzanie, modularyzacja | | 8 | Relax NG | Alternatywny język schematów | | 9 | Procesy pracy — pojęcia | Workflow, koncepcje, zastosowania | | 10 | Procesy pracy — standardy | WfMC, OOWF, BPQL | | 11 | Wyszukiwanie treści | Architektura, jakość, problemy językowe | | 12 | SEO — podstawy | Strategia, słowa kluczowe | | 13 | SEO — optymalizacja | Techniczna, linki, śledzenie | | 14 | Autoryzacja i uwierzytelnianie | CIA, kryptografia, OpenID/OAuth | | 15 | Bezpieczeństwo CMS | OWASP, dobre praktyki, podsumowanie | --- ## Trzy filary przedmiotu Kurs obejmował trzy spójne obszary: ```mermaid mindmap root((Systemy Zarządzania Treścią)) Fundamenty Pojęcia i architektura CMS Systemy zarządzania dokumentami Procesy pracy Technologie XML XML i DTD XML Schema Relax NG Zastosowania Wyszukiwanie treści SEO Bezpieczeństwo ``` --- ## Kluczowe wnioski całego kursu ### 1. CMS to coś więcej niż "strona internetowa" CMS to system **zarządzania cyklem życia treści** — od tworzenia, przez recenzję, publikację, po archiwizację. Łączy repozytorium, workflow i mechanizmy publikacji. ### 2. XML jest fundamentem wymiany danych XML, DTD, XML Schema i Relax NG to **narzędzia definiowania struktur dokumentów** — niezbędne w każdym poważnym systemie zarządzania treścią. ### 3. Procesy pracy automatyzują obieg treści Workflow (WfMC, OOWF) **wyodrębnia logikę procesów** z logiki aplikacji, umożliwiając elastyczne przypisywanie zadań i monitorowanie. ### 4. Wyszukiwanie i SEO decydują o widoczności Bez dobrego wyszukiwania i optymalizacji SEO, nawet najlepsza treść pozostanie **niewidoczna**. ### 5. Bezpieczeństwo to proces, nie produkt Ochrona CMS wymaga **ciągłej uwagi**: aktualizacji, silnych haseł, audytów i backupów. --- ## Nowoczesne trendy: headless, JAMstack i LLM/AI ### Headless CMS — przypomnienie Architektura **headless** (omówiona szerzej w wykładzie 1) oddziela warstwę zarządzania treścią od prezentacji. Treść udostępniana jest przez API (REST/GraphQL) i może trafiać na dowolne kanały. ### JAMstack **JAMstack** (JavaScript, APIs, Markup) to nowoczesny paradygmat budowy witryn: | Składnik | Rola | |---|---| | **JavaScript** | Logika po stronie klienta (React, Vue, Svelte) | | **APIs** | Funkcje serwerowe i dane przez API (headless CMS) | | **Markup** | Statyczny HTML generowany przy buildzie (SSG) | **Zalety:** szybkość (statyczne pliki + CDN), bezpieczeństwo (brak serwera aplikacyjnego), skalowalność, prostsze wdrożenie. **Narzędzia:** Next.js, Gatsby, Astro, Hugo, Eleventy. --- ## Wykorzystanie LLM i AI w systemach CMS Najnowszym trendem jest integracja **modeli językowych (LLM)** i szerzej **sztucznej inteligencji** z systemami zarządzania treścią. ### Obszary zastosowania LLM w CMS | Obszar | Opis | Przykład | |---|---|---| | **Generowanie treści** | Automatyczne tworzenie szkiców, opisów, streszczeń | Draft artykułu, opis produktu | | **Streszczanie** | Automatyczne podsumowania długich tekstów | Streszczenie artykułu, excerpt | | **Tłumaczenie** | Wspomaganie wielojęzyczności | Automatyczne tłumaczenie + korekta | | **Personalizacja** | Dopasowanie treści do użytkownika | Rekomendacje treści | | **SEO automatyczne** | Generowanie meta tagów, opisów, slugów | Meta description, title | | **Klasyfikacja** | Automatyczne tagowanie i kategoryzacja | Przypisanie kategorii | | **Wyszukiwanie semantyczne** | Zrozumienie intencji zapytania | Wyszukiwanie kontekstowe | | **Asystenci / chatboty** | Konwersacyjny dostęp do treści | Chatbot na stronie | | **Generowanie obrazów** | Ilustracje do treści (DALL·E, Midjourney) | Obraz do artykułu | ### Model pracy „człowiek + AI” ```mermaid flowchart LR A["🤖 LLM: generuje szkic"] --> B["👤 Redaktor: weryfikuje, poprawia"] B --> C["🤖 AI: optymalizuje SEO"] C --> D["📢 Publikacja"] D --> E["🤖 AI: monitoruje wyniki"] ``` > LLM **nie zastępuje** redaktora, lecz **wspomaga** go — człowiek pozostaje odpowiedzialny za jakość i poprawność merytoryczną. ### Ryzyka i ograniczenia AI w CMS | Ryzyko | Opis | |---|---| | **Halucynacje** | LLM może generować nieprawdziwe informacje | | **Jakość** | Treść wymaga weryfikacji i korekty | | **Spójność stylu** | Trudność utrzymania spójnego tonu | | **Prawa autorskie** | Niejasny status wygenerowanych treści | | **Nadmiar treści** | Masowa produkcja treści niskiej jakości | | **Zależność** | Nadmierne poleganie na automatyzacji | ### Praktyczne wzorce integracji | Wzorzec | Opis | |---|---| | **Copilot w edytorze** | AI podpowiada i uzupełnia tekst podczas pisania | | **Pipeline generowania** | AI generuje szkic → człowiek akceptuje → publikacja | | **Post-processing** | AI wzbogaca gotową treść (tagi, streszczenie, meta) | | **RAG (Retrieval-Augmented Generation)** | LLM odpowiada na podstawie treści z repozytorium CMS | > **RAG** jest szczególnie istotny: zamiast polegać wyłącznie na wiedzy modelu, LLM **odpowiada na podstawie treści przechowywanych w CMS** — co redukuje halucynacje i zapewnia aktualność. --- ## DevOps, CI/CD i konteneryzacja Nowoczesne projekty CMS korzystają z praktyk **DevOps**: | Praktyka | Opis | |---|---| | **CI/CD** | Automatyczne budowanie, testowanie i wdrażanie | | **Konteneryzacja (Docker)** | Izolowane środowiska, łatwe i powtarzalne wdrożenie | | **GitOps** | Infrastruktura zarządzana przez repozytorium kodu | | **Headless + SSG** | Statyczne strony budowane w pipeline CI/CD | ### Typowy pipeline headless CMS ```mermaid flowchart LR A["📝 Zmiana treści w CMS"] --> B["🔄 Trigger / webhook"] B --> C["🏗️ Build (SSG)"] C --> D["🧪 Testy"] D --> E["🚀 Deploy na CDN"] ``` > Dla headless CMS typowy cykl: zmiana treści → build statyczny → testy → wdrożenie na CDN — w pełni zautomatyzowany w CI/CD. --- ## Podsumowanie — co zapamiętać | Obszar | Najważniejsze | |---|---| | **Definicja** | CMS zarządza cyklem życia treści, nie tylko "stronami" | | **Architektura** | Repozytorium + workflow + publikacja + administracja | | **XML** | Fundament definiowania struktur dokumentów | | **Procesy pracy** | Automatyzacja obiegu treści i zadań | | **Wyszukiwanie** | Relewancja vs trafność, problemy językowe | | **SEO** | Content is King + linki + optymalizacja techniczna | | **Bezpieczeństwo** | CIA, OWASP, dobre praktyki | --- ## Literatura Literatura podstawowa i uzupełniająca do przedmiotu: 1. Robert J. Glushko, Tim McGrath: **Document Engineering**, MIT Press, Cambridge, 2005. 2. Dokumentacje techniczne omawianych narzędzi (WordPress, Drupal, Strapi) dostępne w internecie. 3. **W3Schools** — wybrane zagadnienia (https://www.w3schools.com/). 4. Dokumentacja **Django** (http://djangoproject.com). 5. Dokumentacja **Python** (http://python.org). --- # Dziękuję za uwagę **Systemy Zarządzania Treścią** Politechnika Poznańska