К сожалению, мы обнаруживаем, что HTMLEncode () заменяет только «<» и «>».
Если вы говорите о HttpServerUtility.HtmlEncode , то действительно кодирует символ двойной кавычки. По некоторым причинам он также кодируется как символьные ссылки на диапазон от U + 0080 до U + 00FF.
То, что он не кодирует, это одиночная кавычка. Немного обидно, но обычно вы можете обойти это, используя только двойные кавычки в качестве разделителей значений атрибутов в вашем HTML / XML. В этом случае достаточно HtmlEncode
, чтобы предотвратить HTML-инъекцию.
Тем не менее, javascript
в ваших тегах, и HtmlEncode
явно недостаточно для того, чтобы экранировать содержимое, чтобы перейти в строковый литерал JavaScript. Кодировка JavaScript отличается от кодировки HTML, поэтому, если вы беспокоитесь о одинарных кавычках, вам нужно использовать строковый кодировщик JS.
(Кодер JSON - хорошее начало для этого, но вы хотели бы убедиться, что он кодирует символы U + 2028 и U + 2029, что, к сожалению, допустимо в JSON, но не в JavaScript. Также вам может понадобиться немного Разнообразие HTML-экранирования, если у вас есть JavaScript в контексте HTML. Это может стать проблематичным, обычно лучше избегать этих проблем, скрывая содержимое, которое вы хотите, в простом HTML, например, в скрытом вводе или пользовательском атрибуте. , где вы можете использовать стандартное экранирование HTML, а затем прочитать эти данные из DOM в JS.)