Расширение фильтра не защищает от входных строк XSS. Большинство функций фильтра выполняют некоторую ограниченную очистку на основе наборов символов. Некоторые, такие как _VALIDATE_EMAIL и _VALIDATE_URL, просто проверяют формат в соответствии с регулярными выражениями (в основном).
Даже w3fools говорит:
Фильтр FILTER_UNSAFE_RAW ничего не делает или кодирует и удаляет указанные символы.
Вам нужно использовать его в сочетании с параметром _FLAG_STRIP_ * или _FLAG_ENCODE_ *, чтобы сделать его полезным.
А что касается FILTER_SANITIZE_SPECIAL_CHARS, то вам лучше всего использовать htmlspecialchars ().
Почему фильтр по умолчанию unsafe_raw.
Чтобы не испортить поведение существующих скриптов, настройки фильтра по умолчанию ничего не делают.
Как я могу защитить PHP от этой уязвимости. Я мог бы изменить свой php.ini, но я хотел бы сделать это во время выполнения, но ini_set, ...
Напишите короткую функцию-обертку для htmlspecialchars () и примените ее к всем выводам, которые вы делаете, независимо от того, откуда поступил ввод.
Установка функции фильтра по умолчанию с помощью ini_set () невозможна AFAIK, потому что фильтр работает в основном как magic_quotes. Он просто вызывается один раз для всех входных данных при запуске PHP. Вызов ini_set не влияет на существующие входные массивы.