[英]How to build a parameterized query or user escaping in this SQL statement in C#?
command.CommandText = String.Format("CREATE LOGIN {0} WITH password='{1}'", loginName, password);
loginName和password基于某些用户输入
我意识到这样做是不好的做法但是如何避免在这里进行sql注入?
调用sp_addlogin
- 它已经参数化了
以下是如何参数化SQL。 您可能还想查看有关编写处理此类事物的DAO的这篇文章 。 我不确定你是否可以参数化LoginName。 你可能最喜欢调用sp_addlogin,就像上一张海报所说的那样。
command.CommandText= @"CREATE LOGIN @LoginName WITH password=@Password";
command.CommandType = CommandType.Text;
command.Parameters.Add(new SqlParameter()
{
ParameterName = "@LoginName",
Value = "MyLoginNameValue",
SqlDbType = SqlDbType.NVarChar,
Size = 50
});
command.Parameters.Add(new SqlParameter()
{
ParameterName = "@Password",
Value = "MyPasswordValue",
SqlDbType = SqlDbType.NVarChar,
Size = 50
});
看起来最合适的方法是使用SQL Server SMO SDK。 我不关心任何其他SQL引擎,因为我们永远不会从SQL Server迁移。
您可以通过将DDL查询包装在exec
来参数化此类查询,如下所示:
command.CommandText = "exec ('CREATE DATABASE ' + @DB)"
如果你像往常一样为@DB
添加参数,这应该可行(至少在t-sql中)。
应该可以以相同的方式使用CREATE LOGIN
。
可以尝试这样的事情:
SqlCommand cmd = new SqlCommand(
"CREATE LOGIN @login WITH password=@pwd", conn);
SqlParameter param = new SqlParameter();
param.ParameterName = "@login ";
param.Value = usertextforlogin;
cmd.Parameters.Add(param);
param = new SqlParameter();
param.ParameterName = "@pwd";
param.Value = usertextforpwd;
cmd.Parameters.Add(param);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.