string message = CommonFunctions.SanitiseInput(context.Request.QueryString["msg"]);
该功能定义为:
// Sanitise input
public static string SanitiseInput(string inputText)
{
string cleanedString = inputText;
cleanedString.Replace("<","<"); // No code
cleanedString.Replace(">", ">");
cleanedString.Replace("&", "&"); // No query string breaks
return cleanedString;
}
如果输入"<b>rg</b>"
,则返回相同的内容,而不是"<b>rg</b>"
答案 0 :(得分:7)
C#中的Replace
函数不会修改字符串本身 - 它会返回字符串的修改版本。
试试这个:
public static string SanitiseInput(string inputText)
{
string cleanedString = inputText;
cleanedString = cleanedString.Replace("<","<"); // No code
cleanedString = cleanedString.Replace(">", ">");
cleanedString = cleanedString.Replace("&", "&"); // No query string breaks
return cleanedString;
}
对于"<b>rg</b>"
,这会给你"&lt;b&gt;rg&lt;/b&gt;"
。要将不必要的转化修复为"&"
,请将第三个替换转移到其他两个之前,这将为您提供您期望的结果。
答案 1 :(得分:3)
你应该使用HttpUtility.HtmlEncode():http://msdn.microsoft.com/en-us/library/system.web.httputility.htmlencode.aspx
答案 2 :(得分:1)
我认为你需要使用cleanedString = cleanedString.Replace("<","<");
等。