SQL 视图注入
SQL Injection on Views
我们在 ASP.Net 中使用 3 层架构。
有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;
我们在 ASP.Net 中使用 3 层架构。
有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;