Все эти ответы великолепны, но, по сути, решением XSS будет прекращение генерации HTML-документов путем манипулирования строками.
Фильтрация входных данных всегда хорошая идея для любого приложения.
Экранирование вашего вывода с помощью htmlentities () и друзей должно работать до тех пор, пока он используется должным образом, но это HTML-эквивалент создания SQL-запроса путем объединения строк с mysql_real_escape_string ($ var) - это должно работать, но меньше вещей может Если можно так выразиться, проверьте свою работу по сравнению с подходом, подобным использованию параметризованных запросов.
Долгосрочное решение должно состоять в том, чтобы приложения создавали внутреннюю страницу, возможно, используя стандартный интерфейс, такой как DOM, а затем использовали библиотеку (например, libxml) для обработки сериализации в XHTML / HTML / и т.д. Конечно, мы далеки от того, чтобы быть популярными и достаточно быстрыми, но в то же время мы должны создавать наши HTML-документы с помощью строковых операций, и это по своей природе более рискованно.