在保存到SQL Server 2008之前,我是否应该使用HttpUtility.HtmlEncode()对表单数据进行编码?

时间:2013-07-05 16:21:43

标签: asp.net

我在下面做了:

  1. 过滤危险字符

  2. 在保存到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);
    }
    
  3. 我做得对吗?

3 个答案:

答案 0 :(得分:2)

这完全是100%,错误。

您应该使用参数,以便数据库引擎将从SQL查询中单独发送文本。

您不应随意删除字符或应用无关的转义。

答案 1 :(得分:2)

在存储之前不要进行编码,而是在最靠近输出的点进行编码。通过在存储之前进行编码,您会遇到一些问题

  1. 您将数据限制为单一格式。如果您想将该数据作为JSON返回,该怎么办?还是RSS?编码规则是不同的,现在你几乎强迫数据为HTML。
  2. 如果编码器因错误修复而发生变化怎么办?您的所有存储数据都不会应用该错误修复,因为在将其从存储中拉出后您没有进行编码。
  3. 另外,我同意您应该使用参数化查询或为您执行此操作的ORM,以便在不尝试手动删除字符的情况下防止SQL注入。

答案 2 :(得分:0)

将字符保存到数据库并不是一个大问题。更大的问题是在网页上显示数据。如果您不确定字符串的安全性,请在将数据发送到浏览器时随意使用HtmlEncode / HtmlDecode。