SQL 视图注入

SQL Injection on Views

我们在 ASP.Net 中使用 3 层架构。

有3层

  1. 演示文稿
  2. 商业
  3. 数据访问

数据访问层包含GetData和ExecuteQuery等函数。 我想知道的是,想要直接从表示层调用视图。在不使用存储过程的情况下从前端调用视图是否有可能 SQL 注入?

表示层 (C#)

protected void btnView_Click(object sender, EventArgs e)
        {
            DL obj = new DL();
            DataTable tb = new DataTable();
            string query = "select * from ViewTeacher where FID = " + txtName.Text;

            tb = obj.GetData(query);

        }

DBAccess

public DataTable GetData(string query)
        {
            DataTable datatable = new DataTable();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandText = query;

            try
            {
                if (cmd.Connection.State != ConnectionState.Open)
                {
                    cmd.Connection.Open();
                }
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    da.Fill(datatable);
                }
            }
            catch (Exception ex)
            {

                throw new ArgumentException(ex.Message);
            }
            return datatable;
        }

你好吗"calling a view"?如果您是 运行 的临时查询:

SELECT <columns> FROM View WHERE ColumnX = 'Y'

并且如果该查询是使用(潜在的)恶意输入构建的,那么是的,当然可以 SQL 注入 - 注入的全部意义在于攻击者可以改变查询的性质查询:

SELECT <columns> FROM View WHERE ColumnX = 'Z'
UNION ALL
SELECT name,0,0,0,0 FROM INFORMATION_SCHEMA.TABLES --'

攻击者不仅限于原始查询中存在的对象。


上述两个查询中不可信的输入是:

Y

Z'
UNION ALL
SELECT name,0,0,0,0 FROM INFORMATION_SCHEMA.TABLES --

从前端调用视图时,应该没有 SQL 注入的机会,因为视图不带参数。
参考 : can we pass parameter to a view in sql?

当您编写如下从文本框中获取值的查询时,100% 存在 sql 注入的可能性。

string query = "select * from ViewTeacher where FID = " + txtName.Text;