gpt4 book ai didi

c# - 这段代码可以避免 SQL 注入(inject)吗? (以及为什么)

转载 作者:行者123 更新时间:2023-11-30 18:51:54 26 4
gpt4 key购买 nike

此代码是否可以免受 SQL 注入(inject)攻击?为什么?

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

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

最佳答案

是的,看起来很安全。

因为它使用了参数。

当您创建类似
的查询时,您将面临 SQL 注入(inject)的风险 baseQueryText + "WHERE Username ="+ TextBox.Text;

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

关于c# - 这段代码可以避免 SQL 注入(inject)吗? (以及为什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com