И htmlspecialchars
, и h
экранируют все символы, которые могут иметь особое значение в HTML, буквальный HTML не может быть введен в целевую страницу.
Однако есть способы выполнения (опасного) Javascript, которые не требуют внедрения HTML. Например, если у вас есть приложение, которое конвертирует [img http://example.com/img.jpg]
в <img src="http://example.com/img.jpg/>
, представьте, что может произойти, если пользователь введет [img javascript:alert(document.cookies);]
. Экранирование символов HTML не спасет вас здесь, вы должны очистить данные URL. Это довольно полный список возможных примеров уязвимости XSS .
Если вы всегда используете htmlspecialchars
/ h
и , вы всегда полностью очищаете пользовательский ввод, который используется в качестве значений атрибутов в любых элементах HTML, тогда у вас есть правильная защита XSS.