这种执行程序的方式对 SQL 注入是安全的吗?
Is this way to execute procedure is safe from SQL Injection?
来自 DAL 的示例代码:
我正在使用 C# 和 SQL SERVER 作为数据库。
我写了数据库对象的单例,和例子
从 mssql 执行过程的函数,
使用 DbCommand 和 Database-AddInParameter
我找到了讨论参数和 sql 注入的主题,但是
我想知道具体的方法
private Database m_db;
public Database getDB
{
get
{
if(m_db == null)
m_db = DatabaseFactory.CreateDatabase("ConnectionString");
return m_db;
}
}
public void Example(string Name)
{
DbCommand dbcmd = getDB.GetStoredProcCommand("dbo.Example");
getDB.AddInParameter(dbcmd, "p_Name", DbType.String, Name);
getDB.ExecuteNonQuery(dbcmd);
}
谢谢
dbo.Example
过程肯定仍然可以执行不安全的查询,例如:
create proc dbo.Example (@pName varchar(100))
as
declare @cmd varchar(max);
set @cmd = 'select Somedata from Sometable where Somecolumn = '+ @pName;
exec (@cmd);
安全代码在查询中将 proc 参数完全用作参数
create proc dbo.Example (@pName varchar(100))
as
select Somedata from Sometable where Somecolumn = @pName;
来自 DAL 的示例代码:
我正在使用 C# 和 SQL SERVER 作为数据库。
我写了数据库对象的单例,和例子 从 mssql 执行过程的函数, 使用 DbCommand 和 Database-AddInParameter
我找到了讨论参数和 sql 注入的主题,但是 我想知道具体的方法
private Database m_db;
public Database getDB
{
get
{
if(m_db == null)
m_db = DatabaseFactory.CreateDatabase("ConnectionString");
return m_db;
}
}
public void Example(string Name)
{
DbCommand dbcmd = getDB.GetStoredProcCommand("dbo.Example");
getDB.AddInParameter(dbcmd, "p_Name", DbType.String, Name);
getDB.ExecuteNonQuery(dbcmd);
}
谢谢
dbo.Example
过程肯定仍然可以执行不安全的查询,例如:
create proc dbo.Example (@pName varchar(100))
as
declare @cmd varchar(max);
set @cmd = 'select Somedata from Sometable where Somecolumn = '+ @pName;
exec (@cmd);
安全代码在查询中将 proc 参数完全用作参数
create proc dbo.Example (@pName varchar(100))
as
select Somedata from Sometable where Somecolumn = @pName;