Bezpieczeństwo

JavaScript jest w stanie odczytywać cookies za pomocą document.cookie i przekazać je do dowolnego serwera w sieci np. poprzez umieszczenie ich w URI stworzonego obrazka. Każdy skrypt ma też możliwość wykonywania akcji (np. wysłania formularza) w imieniu użytkownika strony.

Dowolny skrypt uruchomiony w kontekście Twojej strony może w ten sposób wykradać składowane w cookies hasła, identyfikatory sesji i inne poufne dane. Ten problem nazywa się cross-site scripting w skrócie XSS.

Jak może dojść do XSS?

Jeśli umieszczasz na swojej stronie jakikolwiek tekst podany przez użytkownika i nie filtrujesz go odpowiednio starannie. Może to być wpis do księgi gości, czyjeś imie, adres e-mail, czy dowolny parametr w adresie strony lub formularzu, który jest potem prezentowany na stronie.

Skrypt może być podrzucony w elemencie <script>, jako pseudo-URL javascript: lub jako atrybut dowolnego elementu (np. onclick, onmouseover).

Wszelkiego typu liczniki, DHTML menu i inne dodatki, których kod zawiera <script> również mają możliwość przeprowadzenia ataku XSS — instaluj skrypty tylko z godnych zaufania źródeł!

Jak zabezpieczać przed XSS?

Prymitywne sposoby jak wycinanie z tekstu "<script" albo „document.cookie” nie działają. Tego typu filtry łatwo da się oszukać podrzucając im nieprawidłowy kod i zakodowane skrypty.

W PHP używaj strip_tags() bez dodatkowego parametru przepuszczającego jakiekolwiek znaczniki (bo w ich atrybutach można przemycić skrypty).

Każdy tekst wypisywany w HTML powinien być filtrowany przez htmlspecialchars() — wtedy <script> zostanie zmienione na nieszkodliwe &lt;script&gt;. Żeby zaoszczędzić pisania, możesz zrobić funkcję:

  function h($tekst) {return htmlspecialchars($tekst);}
  echo h($_POST['imie']);

Jeśli umieszczasz cudze odnośniki na stronie, zawsze dodawaj im http://, jeśli adres nie zaczyna się od http://, https:// lub mailto:.


Zmodyfikowano: 10.12.2007, 15:56
submit