C# 这段代码不受SQL注入的影响吗?(为什么)
这段代码不受SQL注入的影响吗?为什么?C# 这段代码不受SQL注入的影响吗?(为什么),c#,tsql,sql-injection,C#,Tsql,Sql Injection,这段代码不受SQL注入的影响吗?为什么? public void AddPlayer(string username) { var query = "INSERT INTO dbo.Player(Username, RegisterDate) VALUES(@Username, @RegisterDate)"; using (var connection = new SqlConnection(connectionString)) usin
public void AddPlayer(string username)
{
var query = "INSERT INTO dbo.Player(Username, RegisterDate) VALUES(@Username, @RegisterDate)";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Username", username);
command.Parameters.AddWithValue("@RegisterDate", DateTime.Now);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
public DateTime GetRegisterDate(string username)
{
var query = "SELECT RegisterDate FROM dbo.Player WHERE Username = @Username";
using (var connection = new SqlConnection(connectionString))
using (var command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Username", username);
command.Connection.Open();
return (DateTime)command.ExecuteScalar();
}
}
编辑:是否可以使用存储过程编写注入安全等效代码?如果是,存储过程是什么样的 是的,看起来很安全
因为它使用参数
创建类似baseQueryText+”其中Username=“+TextBox.Text代码>
调整编辑:当您使用存储过程时始终使用参数,因此它们也是安全的。无需特别努力,但您仍然可以/应该过滤传入的数据 是的。您使用的是参数化查询,通常认为这些查询不受SQL注入的影响
你可能仍然想考虑过滤你的输入。
< P>是的,所有非静态数据都是通过绑定参数输入的。你确实想继续过滤。毕竟,当查询一些讨厌的东西时,当返回到UI(假设这里是web)时,不太可能找到播放器……没错,但这不是SQL注入,而是脚本注入。正确的处理方法是在视图中进行HtmlEncoding。并不是说限制用户名有什么坏处。+1。可以构建易受攻击的存储过程,但使用您所说的参数仍然是安全的@asmo:您应该能够或多或少地将现有代码复制到存储过程中。