当我得到?details = value
时,如何保护我的网站免受SQL注入? 来自网址的
并在数据库的xml列中查找具有指定值的对象?
这是示例代码:
sqlQuery = string.Format(@"
SELECT
[data]
FROM " + schema + @".[MyOBjects]
WHERE
" data.exist('/data["theValue"=\"{0}\"]') = 1" +
", property, value);
感谢您的帮助
答案 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