Кроме того, важно отметить, что разрешение людям вставлять HTML или JavaScript на вашу страницу (а не в ваш источник данных) само по себе не несет в себе угрозы безопасности. Уже существуют расширения для браузера, которые позволяют вам изменять DOM и сценарии на веб-страницах, но, поскольку они предназначены только для клиентской части, они будут знать только об этом.
Когда XSS становится проблемой, это когда люди а) используют его для обхода проверки на стороне клиента или фильтрации ввода или б) когда люди используют его для манипулирования полями ввода (например, путем изменения значений тегов OPTION в ACL для предоставления их разрешения они не должны иметь). ЕДИНСТВЕННЫЙ способ предотвратить такие атаки - санировать и проверять входные данные на стороне сервера вместо или в дополнение к проверке на стороне клиента.
Для очистки HTML от ввода, htmlspecialchars идеально подходит, если вы не хотите разрешать определенные теги, в этом случае вы можете использовать библиотеку, такую как HTMLPurifier. Если вы размещаете пользовательский ввод в HREF, ONCLICK или любом другом атрибуте, который позволяет создавать сценарии, вы просто напрашиваетесь на неприятности.
РЕДАКТИРОВАТЬ: Глядя на ваш код, похоже, что вы не цитируете свои атрибуты! Это довольно глупо. Если кто-то введет свое имя пользователя как:
john onclick="alert('hacking your megabits!1')"
Тогда ваш скрипт будет анализироваться как:
<input type=text name=username value=john onclick="alert('hacking your megabits!1')">
ВСЕГДА используйте кавычки вокруг атрибутов. Даже если они не введены пользователем, это хорошая привычка.
<input type="text" name="username" value="<?php echo htmlspecialchars($_POST['username']); ?>">