«Магические кавычки» - это паллиативное средство от некоторых наихудших недостатков XSS, которое работает, избегая всего на входе, что-то не так по замыслу. Единственный случай, когда вы захотите использовать его, это когда вам абсолютно необходимо использовать существующее PHP-приложение, о котором известно, что оно написано небрежно в отношении XSS. (В этом случае у вас серьезные проблемы даже с «магическими кавычками».) При разработке собственного приложения вы должны отключить «магические кавычки» и следовать правилам, безопасным для XSS.
XSS, уязвимость межсайтового скриптинга, возникает, когда приложение включает строки из внешних источников (пользовательский ввод, выборка с других веб-сайтов и т. Д.) В свои [X] HTML, CSS, ECMAscript или другие выходные данные, анализируемые браузером, без надлежащего бежать, надеясь, что специальные символы, такие как «меньше» (в [X] HTML), одинарные или двойные кавычки (ECMAscript), никогда не появятся. Правильное решение - всегда экранировать строки в соответствии с правилами языка вывода: используя сущности в [X] HTML, обратную косую черту в ECMAscript и т. Д.
Поскольку может быть трудно отследить то, что не заслуживает доверия и его необходимо экранировать, хорошая идея всегда избегать всего, что является «текстовой строкой», а не «текста с разметкой» в языке, подобном HTML. В некоторых средах программирования это упрощается за счет введения нескольких несовместимых типов строк: «строка» (обычный текст), «строка HTML» (разметка HTML) и так далее. Таким образом, прямое неявное преобразование из «строки» в «строку HTML» будет невозможно, и единственный способ, которым строка может стать разметкой HTML, - это передать ее через экранирующую функцию.
«Зарегистрировать глобальные переменные», хотя их отключение, безусловно, хорошая идея, решает проблему, совершенно отличную от XSS.