Drodzy programiści! Zapamiętajcie sobie dwie proste rzeczy:
- wszystkie dane pochodzące z niezaufanego źródła (np. od użytkownika) przed użyciem trzeba zakodować w sposób właściwy dla kontekstu użycia,
- właściwy encoding jest trudny,
W związku z tym bardzo proszę, nie róbcie tego sami, bo zrobicie to najprawdopodobniej źle. Zamiast tego wykorzystajcie proszę dostępne w bibliotekach (np. ESAPI, Microsoft Web Protection Library) funkcje napisane przez ludzi, którzy w temacie siedzą nieco głębiej. Przecież w wielu innych przypadkach nie wynajdujecie koła na nowo, tylko korzystacie z tego, co ktoś już napisał i się sprawdziło. Dlaczego z bezpieczeństwem ma być inaczej?
Jeśli już musicie robić to sami, to proszę, popatrzcie jak zrobił to ktoś, kto zrobił to dobrze. Choćby tutaj. Nawet jeśli okaże się, że w takich implementacjach są błędy, to prawdopodobnie będzie ich mniej, niż w tych "własnej roboty", a i szansa na szybkie usunięcie jest zdecydowanie większa.
Oczywiście jest jeszcze walidacja danych wejściowych, ale to jest nieco inny temat.
Z drugiej strony ta wersja dla Javy może być implementacją referencyjną, choćby w zakresie tego jakie funkcje związane z encodingiem warto mieć (np. encodeForJavaScript) i jaki encoding powinien być stosowany.