Nejsem zrovna expert ale jen pár znaků nemusí stačit, podle toho kde se text používá jich může být víc.
Pěkně popsaná nějaká ta pravidla prevence XSS např. zde:
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.htmlNavíc jenom eskepování/ořezávání nemusí stačit. Je vhodné nebo dokonce nutné data obalit například pokud se uživatelská data použijí třeba jako hodnota atributu je třeba tam okolo vrazit uvozovky (také je popsáno v odkazu výše).
Obzvláště pokud to píšeš ručně, tak je třeba si dát pozor.
S tím souvisí i ukládání a načítání dat do souborů/databází - platí podobná pravidla - záleží zda se data nějak parsují (jak při ukládání tak při čtení, nebo případně includování, někdy si člověk ani neuvědomí co všechno fuguje jako parser).
Jen je třeba nezapomenout že to je často druhý, samstatný problém. To že se data správně uloží/načtou neznamená že se mohou vložit kamkoliv do html, escapovací pravidla bývají jiná.
Z toho také plyne že i když se vyhneme eskejpování/čištění při ukládání do databáze pomocí bindingu - viz prepared statementy co zmiňuje Kit, tak to ještě nechrání před XSS!
Jinak řečeno, je třeba eskejpovat/ořezávat a obalovat(např ty uvozovky) podle toho kde/jak jsou data použita.
Takže je potřeba ošetřit data jak při vstupu od uživatele(aby "nehaknul" stránky/databázi/server), tak na i výstupu směrem k uživateli (což je ta prevence XSS)
P.S. Speciálně pokud ukládáš do souboru tak není dobrý nápad nechat uživatele ovlivňovat název souboru na serveru, bezpečnější je si název vygenerovat a uživatelský název mít uložen bokem.