Я достиг некоторого прогресса в этом вопросе. Учтите следующее:
http://www.google.com/%22%%203E%3Cscript%3Ealert%28123%29%3C%2Fscript%3%20E%22
Причина, по которой браузер оставляет URL-адрес без изменений в этом случае, заключается в том, что сервер возвращает ответ HTTP 404, означающий, что ресурс не может быть найден. В этих случаях Firefox не вносит изменений в URL. Если вместо этого вы попробуете URL-адрес, который запрашивает ответ 200 OK от Google, такой как следующий ...
http://www.google.com/?displayname=%22%3E%3Cscript%3Ealert%28123%29%3C%2Fscript%3E%22
... вы обнаружите, что FireFox изменит URL, когда сервер ответит измененным URL.
Попробуй сам. Фактически, если вы вырезаете и вставляете измененный URL-адрес в электронное письмо, вы обнаружите, что символы остаются неизменными.
Это не имеет ничего общего с тем, что сервер на самом деле отвечает, за исключением HTTP-кода ответа. Если сервер отвечает «404 Not found», FireFox решает оставить URL-адрес в адресной строке без изменений. Если сервер отвечает «200 OK», FireFox выбирает изменить URL-адрес, исключая некоторые символы, по-видимому, в попытке сделать URL-адрес более читабельным. Если ресурс не может быть найден, логика заключается в том, что нет смысла делать это.
Я предполагаю, что вы используете Firefox. На самом деле браузеры относятся к этому случаю по-разному. Я попытался набрать этот URL (второй) в нескольких браузерах. Я подвел итоги:
Google Chrome делает то же самое, что и Firefox. Кавычки и угловые скобки отображаются как обычные символы без экранирования.
Internet Explorer Оставляет URL-адрес без изменений, но выдает предупреждение о XSS и не отображает страницу Google.
Opera Показывает только "www.google.com" в адресной строке.
Safari Оставляет URL без изменений.
Надеюсь, это прояснит ситуацию. Одна вещь, которую вы можете сделать, чтобы убедить себя во всем этом, - запустить прокси-сервер отладки HTTP, такой как Fiddler. Вы можете видеть, что в каждом случае то, что возвращает сервер, идентично, это просто вопрос того, как каждый браузер решает изменить URL-адрес, когда сервер отвечает.
С уважением,
Джеймс