infopath查询和SQL注入问题

时间:2011-09-02 11:21:30

标签: .net sql infopath

当我得到?details = value

时,如何保护我的网站免受SQL注入? 来自网址的

并在数据库的xml列中查找具有指定值的对象?

这是示例代码:

sqlQuery = string.Format(@"
                    SELECT 
                        [data]

                    FROM " + schema + @".[MyOBjects] 
                    WHERE 

                        " data.exist('/data["theValue"=\"{0}\"]') = 1" + 



                    ", property, value);

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

查看以下有关保护代码免受SQL注入的文章:Protect From SQL Injection in ASP.NET

在您的情况下,您可能希望查看使用参数化查询。签出“步骤3.使用动态SQL参数”。

你可以使用类似的东西:

string connectionString = "...";
string schema = "...";
string value = "...";

using (SqlConnection connection = new SqlConnection(connectionString))
{
    string sql = string.Format("SELECT [data] FROM {0}.[MyOBjects] WHERE data.exist('/data[\"theValue\"=sql:variable(\"@value\")]') = 1", schema);

    SqlCommand sqlCommand = new SqlCommand(sql, connection);
    sqlCommand.CommandType = System.Data.CommandType.Text;
    sqlCommand.Parameters.Add(new SqlParameter("@value", System.Data.SqlDbType.NVarChar, 255) { Value = value });

    ....
}

答案 1 :(得分:0)

在数据库中使用存储过程,而不是将值直接传递给查询,而是将它们传递给存储过程。如果你真的需要表名是动态的,那么有一些方法可以做到这一点。

以下是一个例子:http://www.nigelrivett.net/SQLTsql/TableNameAsVariable.html