此代码是否可以免受 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/