Как я могу удостовериться, что строка является чистой для вставки в предупреждение JavaScript ('сообщение об ошибке')

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

errorMessage.Replace("'", "\'")

Но это не достаточно, поскольку некоторые запрещенные символы не удаляются, там статический метод где-нибудь в платформе, которая отформатирует мою строку для чистой вставки в HTML?

Обновление: мой начальный вопрос был немного неоднозначен. строка должна быть допустимой как на предупреждении ('это - некоторый 'недопустимый текст', который не раскроется'); я попробую Сервер. HtmlEncode, надо надеяться, это добьется цели.

6
задан user373186 24 June 2010 в 09:45
поделиться

7 ответов

Если вы посмотрите на модуль AntiXSS в Библиотеке веб-защиты , вы обнаружите, что в нем есть метод JavaScriptEncode (string) именно для этого.

7
ответ дан 9 December 2019 в 22:28
поделиться

Чтобы экранировать строку для чистой вставки в HTML, вы можете использовать метод HttpUtility.HtmlEncode . Я не уверен, что это поможет вам с javascript.

http://msdn.microsoft.com/en-us/library/73z22y6h.aspx

0
ответ дан 9 December 2019 в 22:28
поделиться

Если вы используете ASP.NET 4, вы можете использовать новый синтаксис <%:%> для HtmlEncode сгенерированной строки И заменить кодировщик по умолчанию на AntiXSS или любую другую библиотеку, которую вы можете предпочесть. Фил Хаак объясняет, как это сделать, в Использование AntiXss в качестве кодировщика по умолчанию для ASP.NET

Таким образом вы можете написать предупреждение, подобное этому:

alert('<%: this.ErrorMessage %>');

В предыдущих версиях вы можете использовать то, что предлагали другие, либо HtmlEncode или AntiXss, например:

alert('<%= HttpUtility.HtmlEncode(this.ErrorMessage) %>');

или

alert('<%= AntiXss.HtmlEncode(this.ErrorMessage) %>');
0
ответ дан 9 December 2019 в 22:28
поделиться

Спасибо за помощь, но ни один из представленных ответов не дал мне полного решения.

Ответ Джо был наиболее близким, но он не учитывал \ r \ n новую строку. Я не мог найти способ перевести новую строку С # в эквивалент javascript.

public static string EscapeAlertMessage(string value)
{
  value = value.Replace("\\", "\\\\");
  value = value.Replace("'", "\\'");
  value = value.Replace("\"", "\\\"");
  value = value.Replace(Environment.NewLine, "--");

  return value;
}
0
ответ дан 9 December 2019 в 22:28
поделиться

HttpUtility.HtmlEncode не кодирует одинарные кавычки (') и не подходит для кодирования строки, которая будет использоваться в качестве предупреждающего сообщения. Лично я делаю это так:

public static string EscapeAlertMessage(string value)
{
    value = value.Replace("\\", "\\\\");
    value = value.Replace("'", "\\'");
    value = value.Replace("\"", "\\\"");
    return value;
}

Если ваше сообщение содержит несколько строк, вы можете заменить их на "\ n" - например, если строки разделены Environment.NewLine:

value = value.Replace(Environment.NewLine, "\\n");

Или, если вы не знаете, что такое разделители (только \ r \ n, \ n или \ r), вы можете использовать:

value = value.Replace("\r", "\\r");
value = value.Replace("\n", "\\n");
0
ответ дан 9 December 2019 в 22:28
поделиться

Есть простое решение... используйте DataContractJsonSerializer и "сериализуйте" строковое значение. Сериализуя строку в JSON, вы по определению гарантируете, что она будет хорошо работать внутри оператора оповещения.

3
ответ дан 9 December 2019 в 22:28
поделиться

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

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

1
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: