这段代码可以安全地避免 SQL 注入吗? (以及为什么)

发布于 2024-11-25 15:56:28 字数 1120 浏览 0 评论 0原文

这段代码可以安全地避免 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();
        }
    }

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

Is this code safe from SQL injections? Why?

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: Could injection-safe equivalent code be written using a stored procedure? If so, what the stored procedure would be like?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浮华 2024-12-02 15:56:28

是的,看起来很安全。

因为它使用了参数。

当您创建如下查询时,您会面临 SQL 注入的风险
baseQueryText + " WHERE Username =" + TextBox.Text;

注意编辑:当您使用存储过程时,您始终使用参数,因此它们也是安全的。不需要特殊的努力,但您仍然可以/应该过滤传入的数据。

Yes, It looks safe.

Because it uses parameters.

You run a risk of SQL-injection when you create queries like
baseQueryText + " WHERE Username =" + TextBox.Text;

Reguarding the Edit: When you use a Stored Procedure you always use parameters so they are safe too. No special effort required, but you still could/should filter incoming data.

请你别敷衍 2024-12-02 15:56:28

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

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

Yes. You are using parameterized queries, which are in general considered safe from SQL injection.

You may still want to consider filtering your inputs anyway.

陈年往事 2024-12-02 15:56:28

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

Yes, all the non-static data is being fed in via bound parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文