Защищает ли urlencode () от XSS

$address и $cityState предоставляется пользователю, хранятся в БД и доступны для других, как показано ниже. Существует ли риск XSS ? Должен ли использоваться htmlspecialchars() ?

 <img src="http://maps.google.com/maps/api/staticmap?markers=color:blue|<?php echo(urlencode($address.' '.$cityState));?>&amp;zoom=14&amp;size=400x400&amp;sensor=false" alt="Map" /> 

Нет никакой волшебной палочки PHP-функции, которая защитит вас от всех. Каждая защита на 100% безопасна до тех пор, пока она не будет взломана. Вам просто нужно понять, откуда и как ваш сайт может быть взломан и улучшить вашу защиту каждый день.

Вы можете получить некоторые интересные советы из статьи о предотвращении XSS .

Также из документации php.net urlencode :

 <?php $query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar); echo '<a href="mycgi?' . htmlentities($query_string) . '">'; ?> 

Да, также следует использовать htmlspecialchars – вы сначала кодируете URL-адрес, чтобы быть безопасным URL-адресом, а затем вы строите его в HTML-атрибут, который требует «экранирования в стиле HTML».

После использования обоих кодировок уже невозможно ввести произвольный код на вашем конце шкалы, поэтому, если все риски остаются, они находятся в конце Google. Таким образом, вы можете считать этот код безопасным.

urlencode() не должен использоваться для защиты от XSS. htmlspecialchars() – это путь, но вы никогда не будете в безопасности.