使用odbc {call}到SQL Server存储的储存的SQL注入?

问题描述 投票:0回答:0
CDatabase DB; SQL.Format("{CALL InsertStoredProcedureXYZ('%s','%s')}", ParamStr1, ParamStr2); DB.ExecuteSQL(SQL);

为查询做类似的事情:

CRecordset Recordset; SQL.Format("{CALL QueryStoredProcedure('%s','%s')}", ParamStr1, ParamStr2); Recordset.Open(CRecordset::forwardOnly, SQL, CRecordset::readOnly);
我担心这些语句使用的参数通常直接来自Web API参数。该代码进行了一些简单的参数筛选,主要是用“”替换为“”并验证字符串长度。

我相信

{call sp()}
是ODBC的事情。我认为SQL-Server没有呼叫命令。因此,在调用存储过程之前,ODBC是否正在进行注射安全参数制备?我还知道,ODBC可以使用
{call sp(?,?)}

来调用存储过程,然后是参数绑定。这似乎是更好的练习,但是对此进行更改将需要对项目代码准备呼叫声明的多次重构。

这个C ++ MFC ODBC代码似乎很老式,因此我未能找到任何可以告诉我我是否可以直接从API参数直接从API参数中构建

{call sp()}字符串。这只是伪装成好习惯的糟糕的旧SQL声明大楼吗? 这个不安全。

我们看不到所有代码,但是由于注入的值被单个引号包围,因此我们可以得出结论,它们被粘贴到SQL批处理中,而不是以参数的形式发送。

SQL.Format("{CALL InsertStoredProcedureXYZ('%s','%s')}", ParamStr1, ParamStr2);

c++ sql-server windows mfc odbc
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.