这是安全的代码从SQL注入?(为什么)

本文关键字:注入 为什么 SQL 安全 代码 | 更新日期: 2023-09-27 18:03:07

这个代码安全吗?为什么?

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();
        }
    }

EDIT:是否可以使用存储过程编写注入安全的等效代码?如果是这样,那么存储过程是什么样的呢?

这是安全的代码从SQL注入?(为什么)

是的,看起来很安全。

因为它使用参数。

当你创建像
这样的查询时,你有sql注入的风险baseQueryText + " WHERE Username =" + TextBox.Text;

重新保护编辑:当您使用存储过程时,您总是使用参数,因此它们也是安全的。不需要特别的努力,但是您仍然可以/应该过滤传入的数据。

是。您正在使用参数化查询,这通常被认为是安全的SQL注入。

无论如何,您可能仍然需要考虑过滤您的输入

是的,所有的非静态数据都是通过绑定参数输入的。