从SQL注入执行过程是否安全?

时间:2017-06-19 06:58:34

标签: c# sql sql-server sql-injection

来自DAL的示例代码:

我使用c#和SQL SERVER作为数据库。

我编写了Database对象的单例和示例 从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);
}

感谢

1 个答案:

答案 0 :(得分:2)

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;