Кодирование апострофа - PullRequest
       16

Кодирование апострофа

7 голосов
/ 04 августа 2009

Я создаю строку на сервере, который помещается в переменную javascript на клиенте.

Как лучше всего кодировать это, чтобы избежать каких-либо проблем

прямо сейчас на сервере я делаю что-то вроде этого:

 html = html.Replace("'", "'");

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

Ответы [ 5 ]

10 голосов
/ 04 августа 2009

Вам действительно лучше использовать Microsoft Anti-Cross Site Scripting Library для этого. Они предоставляют метод JavaScriptEncode, который делает то, что вы хотите:

Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False)
1 голос
/ 19 декабря 2012

Я обнаружил, что библиотека AntiXSS не смогла выполнить то, что я искал, то есть кодировать на стороне сервера и декодировать в javascript.

Вместо этого я использовал Microsoft.JScript.dll, который позволяет:

GlobalObject.escape(string);

и на стороне клиента в javascript:

unescape(string);
1 голос
/ 13 апреля 2012
html = html.Replace("'", "%27");
1 голос
/ 04 августа 2009

Я не уверен, в каком контексте вы используете эту строку, но \' может быть тем, что вы ищете. Обратная косая черта является escape-символом и позволяет вам использовать определенные символы , которые иначе не могут присутствовать в строковом литерале. Вот как должен выглядеть выходной JavaScript:

alert('It\'s amazing');

Конечно, вы можете использовать alert("It's amazing"); в данном конкретном случае.

В любом случае, если вы создаете код JavaScript:

html = html.Replace("'", "\\'");

С другой стороны, кроме апострофов есть другие символы, которые требуют некоторой обработки. При использовании библиотеки Microsoft Anti-Cross Site Scripting получит их все сразу.

0 голосов
/ 04 августа 2009

Символы, которые необходимо экранировать в строковом значении, - это обратный слеш и символ, используемый в качестве разделителя строк.

Если в качестве разделителя строк используется апостроф ('):

html = html.Replace(@"\", @"\\").Replace("'", @"\'");

Если в качестве разделителя строк используются кавычки ("):

html = html.Replace(@"\", @"\\").Replace(@"""", @"\""");

Если вы не знаете, какой разделитель используется или может измениться в будущем, вы можете просто избежать обоих:

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\""");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...