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 <script>
. Ż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: 01.11.2006, 16:19