Bezpieczeństwo w React
React domyślnie chroni przed XSS (escaping wszystkich wartości w JSX), ale są pułapki: dangerouslySetInnerHTML, niezabezpieczone URL-e, API keys w kodzie. Bezpieczna aplikacja to nie tylko działa — to nie daje się zhakować.
This content is not available in your language yet.
Bezpieczeństwo w React
React domyślnie chroni przed XSS (escaping wszystkich wartości w JSX), ale są pułapki: dangerouslySetInnerHTML, niezabezpieczone URL-e, API keys w kodzie. Bezpieczna aplikacja to nie tylko działa — to nie daje się zhakować.
<script> w JSX staje się <script>dangerouslySetInnerHTML jest niebezpieczne? — Omija escaping — wstawia raw HTMLSchemat
Diagram ataku XSS: użytkownik wpisuje <script>alert('hack')</script> → formularz → baza → wyświetlenie bez sanitacji → uruchomienie JS atakującego. Pokaż jak React/sanitacja blokuje ten flow.
Przykład kodu JSX
dangerouslySetInnerHTML bez i z DOMPurify. Pokaż różnicę w wynikowym HTML.
Forma: 10 slajdów, 10 minut
Ocena: 3.0Forma: 12-15 slajdów, 12 minut
Ocena: 4.0-5.0Forma: 15 slajdów + Q&A
Ocena: 5.0-6.0// Bezpieczne: React automatycznie escapujeconst userInput = '<script>alert("hack!")</script>';return <p>{userInput}</p>;// W DOM: <p><script>alert("hack!")</script></p>// Widoczny jako tekst, nie wykonywany!
// NIEBEZPIECZNE: omija escapingreturn <p dangerouslySetInnerHTML={{ __html: userInput }} />;// W DOM: <script>alert("hack!")</script> — WYKONA SIĘ!
// BEZPIECZNE z sanitacją:import DOMPurify from 'dompurify';const clean = DOMPurify.sanitize(userInput);return <p dangerouslySetInnerHTML={{ __html: clean }} />;// ŹLE: API key w kodzie (widoczny dla każdego!)const API_KEY = 'sk-1234567890abcdef'; // COMMIT TO GIT = DISASTERfetch(`https://api.openai.com/v1/completions`, { headers: { Authorization: `Bearer ${API_KEY}` }});
// DOBRZE: zmienna środowiskowa (Vite)// .env.local (NIGDY nie commituj do git!)// VITE_API_URL=https://my-backend.com/api
// W kodzie React (tylko publiczne adresy, NIE tajne klucze):const API_URL = import.meta.env.VITE_API_URL;// Tajne klucze tylko na BACKENDZIE — React/frontend to publiczny kod!Demo XSS
Pokażcie stronę bez sanitacji gdzie wpisanie <img src=x onerror=alert(1)> powoduje alert. Potem pokażcie tę samą stronę z React — nic się nie dzieje. Klasa to zapamiętają!
GitHub leak
Wspomnijcie o prawdziwych incydentach: programiści commitowali klucze AWS do GitHub i dostawali rachunek na tysiące dolarów w ciągu minut. Boty skanują GitHub 24/7.
Bezpieczeństwo to odpowiedzialność każdego developera!
Jeden bug bezpieczeństwa może kosztować firmę miliony. Ten temat wyróżni Was jako developerów świadomych zagrożeń!