IAxaptaRecord.ExecuteStmtへの注入安全の呼び出し()
質問
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からのことをコールする方が良いでしょうか?
解決
あなたはすべてのケースをカバーしていることを確認してくださいする方法はありません...
ExecuteStmtを使用して、最も可能性の高い間違ったアプローチです。あなたは、そのメソッドを呼び出します。
(パラメータを持つ)のAxapta方法であなたの選択または何を書くべき他のヒント
あなたは\「には」に置き換える必要があります 例えばます。
string salesId = someObject.Text.Replace("'", "\\'");
ホルツ、
あなたはforcePlaceholderキーワードとパラメータ化SELECTステートメントを使用することができます。 これは、X ++のデフォルトの動作ですが、この動作は複雑な結合のために上書きすることができるので、それは暗黙的にforcePlaceholderヒントを指定することをおすすめします。
パラメータ化のSELECTは、いくつかの追加のオーバーヘッドを課し、そしてパラメータの実際の値にoptimiziationを許可していないので、は、あなたの代わりにビュー、またはのAxaptaクエリを使用して検討する必要があります。
よろしく、 Velislavマリノフ
所属していません StackOverflow