2

是否有通过 axpata 业务连接器调用的安全注入方式

string salesId = someObject.Text;

IAxaptaRecord salesLine = ax.CreateRecord("SalesLine");
salesLine.ExecuteStmt("select * from %1 where %1.SalesId == '" + salesId + "'"); 

如果 someObject.Text 设置为以下,那么我很容易受到 x++ 代码注入:

"SomeSalesOrder' || %1.SalesId == 'SomeOtherOrder"

有没有办法对查询进行参数化,或者直接在 x++ 中编写所有数据访问代码,然后从 COM 调用它会更好吗?

4

2 回答 2

2

无法确保您已涵盖所有案例...

使用 ExecuteStmt 很可能是错误的方法。您应该在 Axapta 方法(带参数)中编写您的选择或其他内容,然后调用该方法。

于 2009-05-18T07:13:32.580 回答
-2

你应该在 ' to \' 上做一个替换,例如

string salesId = someObject.Text.Replace("'", "\\'");
于 2009-05-18T04:14:14.403 回答