这是安全的代码从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注入的风险baseQueryText + " WHERE Username =" + TextBox.Text;
重新保护编辑:当您使用存储过程时,您总是使用参数,因此它们也是安全的。不需要特别的努力,但是您仍然可以/应该过滤传入的数据。
是。您正在使用参数化查询,这通常被认为是安全的SQL注入。
无论如何,您可能仍然需要考虑过滤您的输入
是的,所有的非静态数据都是通过绑定参数输入的。