htmlspecialchars
- это очень хорошая защита от XSS, когда вы вставляете пользовательский ввод в документ HTML.
Он останавливает любой синтаксис HTML в пользовательском вводе от того, что вы намереваетесь для этого go и рассматривается как JavaScript.
Ваша проблема не имеет ничего общего с тем фактом, что атака закодирована. Проблема в том, что пользователь вводит куда-то, что ожидается JavaScript (и атрибут onload
), поэтому уже обрабатывается как JavaScript.
json_encode
обычное решение здесь (и затем htmlspecialchars
, поскольку JavaScript находится внутри атрибута HTML).
Однако это работает только тогда, когда вы принимая пользовательский ввод и помещая его в сценарий для использования в качестве данных. Здесь кажется, что вы принимаете пользовательский ввод и просто рассматриваете все как функцию JavaScript.
Если вы сделаете это, вы будете уязвимы для XSS. Вы можете смягчить это до некоторой степени, внедрив защиту от CSRF, но вы почти наверняка не должны делать это в первую очередь.