sprintf не меняет выдаваемую строку, считай тупо ее копирует
xss это инжект скриптов на страницу через посылку специальных данных в форму, где этиданные не экранируются, например если выводить как есть то что пользователь послал в inout формы, то атакующий может туда javascript:.... послать
формально от PHP_SELF защищаться не надо, но мало ли что там на mod_rewrite-д веб сервер туда, поэтому чтобы уж наверняка, считать нужно все поступающее из вне - опасным кодом, и проверять на допустимые символы
Просто добавь к URL /"><script>alert(1);</script>
Чел, sprintf тупо вставляет в строку значение. Он не экранирует каким-либо образом. Можно было бы просто конкатенацией сделать. Ничего бы не изменилось.
sprintf занимается только выводом по шаблону, не более и не менее того.
т.е. если в выводимой строке будет находится нечто опасное - оно как есть будет выведено.
экранирование, или удаление тегов, что реально может защитить от xss - это полностью отдельная функциональность. которая не входит в задачи sprintf.