我在下面做了:
过滤危险字符
在保存到SQL Server 2008之前对表单数据进行编码
public static string EncodeData(string str)
{
string getStr = str;
getStr = getStr.Replace(";", " ");
getStr = getStr.Replace("&", "");
getStr = getStr.Replace("<", "");
getStr = getStr.Replace(">", "");
getStr = getStr.Replace("'", "");
getStr = getStr.Replace("--", "");
getStr = getStr.Replace("/", " ");
getStr = getStr.Replace("%", "");
getStr = getStr.Replace("*", "");
getStr = getStr.Replace(":", "");
getStr = getStr.Replace("!", "");
return HttpUtility.HtmlEncode(getStr);
}
我做得对吗?
答案 0 :(得分:2)
这完全是100%,错误。
您应该使用参数,以便数据库引擎将从SQL查询中单独发送文本。
您不应随意删除字符或应用无关的转义。
答案 1 :(得分:2)
在存储之前不要进行编码,而是在最靠近输出的点进行编码。通过在存储之前进行编码,您会遇到一些问题
另外,我同意您应该使用参数化查询或为您执行此操作的ORM,以便在不尝试手动删除字符的情况下防止SQL注入。
答案 2 :(得分:0)
将字符保存到数据库并不是一个大问题。更大的问题是在网页上显示数据。如果您不确定字符串的安全性,请在将数据发送到浏览器时随意使用HtmlEncode / HtmlDecode。