вложенные кавычки в JavaScript - PullRequest
       7

вложенные кавычки в JavaScript

1 голос
/ 22 сентября 2009

Немного нубский вопрос здесь ...

У меня есть функция JavaScript в списке строк таблицы

<tr onclick="ClosePopup('{ScenarioID}', '{Name}');" />

Однако значение {Name} может иногда содержать символ "'" (одинарная кавычка). В настоящее время возникает ошибка Ожидается: ')' , поскольку она эффективно завершает функцию javascript на ранней стадии и разрушает синтаксис.

Каков наилучший способ запретить использование одинарных кавычек в значении {Name} для javascript?

Ура! * * 1013

Ответы [ 4 ]

6 голосов
/ 22 сентября 2009

Вы совершаете первый смертельный грех небезопасного программирования веб-шаблона - не экранирование содержимого значений, отображаемых в шаблоне. Я почти гарантирую вам, что если вы воспользуетесь этим подходом, ваше веб-приложение будет уязвимо для XSS (межсайтовый скриптинг), и любая третья сторона сможет запускать пользовательский javascript на вашей странице, красть пользовательские данные и наносить ущерб, как они пожелают.

Проверьте это. http://en.wikipedia.org/wiki/Cross-site_scripting

Решение состоит в том, чтобы избежать содержимого. И сделать это правильно в javascript, который также находится внутри html, гораздо больше, чем просто поместить escape-последовательности перед обратными слешами.

Любой приличный шаблонизатор должен предоставить вам способ избежать содержимого, как оно написано в шаблоне. Ваши значения базы данных могут быть оставлены как есть, важная часть избегает его во время вывода. Если ваш движок шаблонов или динамический фреймворк веб-приложений этого не допускают, выберите тот, который это делает. :)

1 голос
/ 22 сентября 2009

В поддержку предыдущего комментария, пожалуйста, прочитайте следующее, чтобы лучше понять, почему совет по безопасности так важен.

http://eval.symantec.com/mktginfo/enterprise/white_papers/b-whitepaper_web_based_attacks_03-2009.en-us.pdf

0 голосов
/ 22 сентября 2009

Хотя информация о безопасности, предоставляемая всеми, очень важна, в этой ситуации она была не столь актуальна для меня, поскольку все в этом случае относится к клиентской части, меры безопасности применяются при получении данных и рендеринге XML. Страница также защищена с помощью проверки подлинности Windows (только в разделе adminsitration), и структура веб-приложения не может быть изменена. В конце концов, ответ, который я искал, был действительно очень простым.

<tr onclick='ClosePopup("{ScenarioID}", "{Name}");' />
0 голосов
/ 22 сентября 2009

Я думаю, что вы можете убить практически любое внедрение кода, например, заменив

"Hello"

с

String.fromCharCode(72,101,108,108,111)
...