c # заменить строковую функцию, не возвращая ожидаемых результатов - PullRequest
2 голосов
/ 22 февраля 2011
string message = CommonFunctions.SanitiseInput(context.Request.QueryString["msg"]);

И функция определяется как:

// Sanitise input
public static string SanitiseInput(string inputText)
{
    string cleanedString = inputText;

    cleanedString.Replace("<","&lt;");      // No code
    cleanedString.Replace(">", "&gt;");
    cleanedString.Replace("&", "&amp;");    // No query string breaks

    return cleanedString;
}

При вводе "<b>rg</b>" возвращается то же самое, а не "&lt;b&gt;rg&lt;/b&gt;"

Ответы [ 3 ]

7 голосов
/ 22 февраля 2011

Функция Replace в C # не изменяет саму строку - она ​​возвращает измененную версию строки.

Попробуйте это:

public static string SanitiseInput(string inputText)
{
    string cleanedString = inputText;

    cleanedString = cleanedString.Replace("<","&lt;");      // No code
    cleanedString = cleanedString.Replace(">", "&gt;");
    cleanedString = cleanedString.Replace("&", "&amp;");    // No query string breaks

    return cleanedString;
}

Для "<b>rg</b>" это даст вам "&amp;lt;b&amp;gt;rg&amp;lt;/b&amp;gt;". Чтобы исправить ненужные преобразования в "&amp;", переместите третью замену на две другие, чтобы получить ожидаемый результат.

3 голосов
/ 22 февраля 2011

Вы должны использовать HttpUtility.HtmlEncode (): http://msdn.microsoft.com/en-us/library/system.web.httputility.htmlencode.aspx

1 голос
/ 22 февраля 2011

Я думаю, вам нужно использовать cleanedString = cleanedString.Replace("<","&lt;"); и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...