C# 这段代码不受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

这段代码不受SQL注入的影响吗?为什么?

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:您应该能够或多或少地将现有代码复制到存储过程中。