Sobes.tech
Middle

Jak możesz zabezpieczyć aplikację przed potencjalnie niebezpiecznymi danymi od klienta?

sobes.tech AI

Odpowiedź od AI

Aby chronić się przed niebezpiecznym wejściem:

  1. Sanityzacja danych: Oczyść dane wejściowe użytkownika z potencjalnie złośliwego kodu (HTML, JavaScript) przed wyświetleniem na stronie.

    // Przykład sanityzacji za pomocą DOMPurify
    const cleanHtml = DOMPurify.sanitize(userInput);
    
  2. Escapowanie wyjścia: Zamień specjalne znaki na ich bezpieczne odpowiedniki przed wyświetleniem, aby zapobiec wykonaniu kodu.

    <!-- Przykład escapowania -->
    <p id="output"></p>
    <script>
      const userInput = "<script>alert('XSS')</script>";
      document.getElementById('output').textContent = userInput; // Użycie textContent dla bezpiecznego wyjścia
    </script>
    
  3. Polityka bezpieczeństwa treści (CSP): Skonfiguruj nagłówek HTTP Content-Security-Policy, aby ograniczyć źródła treści, które mogą być ładowane i wykonywane przez przeglądarkę.

    Content-Security-Policy: default-src 'self'; script-src 'self' https://cdnjs.cloudflare.com; style-src 'self' 'unsafe-inline';
    
  4. Walidacja danych: Sprawdź dane wejściowe użytkownika pod kątem zgodności z oczekiwanym formatem, typem danych i długością, zarówno po stronie klienta, jak i serwera.

    // Przykład walidacji po stronie klienta
    if (inputField.value.length > 100) {
      // Błąd walidacji
    }
    
  5. Używanie bezpiecznych API i bibliotek: Preferuj wbudowane API i renomowane biblioteki do pracy z DOM, przetwarzania danych i unikania bezpośredniego użycia innerHTML z nieoczyszczonymi danymi.

  6. Ograniczenie uprawnień użytkownika: Zastosuj zasadę najmniejszych przywilejów, aby interfejs użytkownika nie pozwalał na wykonywanie potencjalnie niebezpiecznych działań bez odpowiedniego uwierzytelnienia.

  7. HTTPS: Zawsze używaj HTTPS do szyfrowania danych między klientem a serwerem.

  8. Ochrona przed CSRF (Cross-Site Request Forgery): Używaj tokenów CSRF do weryfikacji autentyczności żądań wysyłanych z klienta.

    // Przykład wysyłki tokena CSRF
    fetch('/api/update', {
      method: 'POST',
      headers: {
        'X-CSRF-Token': csrfToken
      },
      body: JSON.stringify(data)
    });
    
  9. Flaga HttpOnly dla ciasteczek: Ustaw flagę HttpOnly dla ciasteczek sesyjnych, aby uniemożliwić dostęp do nich z JavaScript.

  10. Regularne aktualizacje zależności: Utrzymuj używane biblioteki i frameworki na bieżąco, aby wyeliminować znane luki bezpieczeństwa.