У меня есть текстовое поле в стиле форума, и я хотел бы очистить вводимые пользователем данные, чтобы остановить потенциальную вставку xss и кода.Я видел, как использовались htmlentities, но другие говорили, что символы &, #,%,: также необходимо кодировать, и, чем больше я смотрю, тем больше потенциально опасных символов появляется.Белый список проблематичен, так как помимо ^ a-zA-z0-9 есть много допустимых текстовых опций.Я придумал этот код.Будет ли это работать, чтобы остановить атаки и быть в безопасности?Есть ли причина не использовать его, или лучше?
function replaceHTML ($match) {
return "&#" . ord ($match[0]) . ";";
}
$clean = preg_replace_callback ( "/[^ a-zA-Z0-9]/", "replaceHTML", $userInput );
РЕДАКТИРОВАТЬ: _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ Конечно, я могу ошибаться, но, насколько я понимаю, htmlentities заменяет только & <> "(и 'если ENT_QUOTES включен). Этого, вероятно, достаточно, чтобы остановить большинство атак (и, откровенно говоря, вероятно, более чем достаточно для моегосайт с низким трафиком. Однако, из-за моего навязчивого внимания к деталям, я продолжал копать. У меня есть книга, в которой я предупреждаю также кодировать # и% для «отключения шестнадцатеричных атак». Два веб-сайта, которые я обнаружил, не разрешают: и -.все это меня смущает и побудило меня заняться преобразованием всех не алфавитно-цифровых символов. Если htmlentities делает это уже тогда, то отлично, но это не так. Вот результаты из кода, который я запустил и скопировал после нажатия на источник просмотра в Firefox.
оригинал (случайные символы для проверки): 5: gjla # '' * & $! Jl: 4
preg_replace_callback: 5: gjla # '' * & $! jl: 4
htmlentities (w / ENT_QUOTES): 5: gjla # '' * & $! jl: 4
htmlentities, похоже, не кодирует эти другие символы, такие как: Извините за стену текста.Это я просто параноик?
РЕДАКТИРОВАТЬ # 2: _ __ _ __ _ __ _ _