問題
Checkmarx 升級到 V9.6.7.1005 HF20 後, 原本使用 Dapper 的程式居然被掃出有 SQL Injection 的風險。
程式以 Console 程式來說明,大約如下,
1 | string dbFile = "mydb.sqlite"; |
在 IEnumerable<Table1> results = connection.Query<Table1>(sql, p1);
會被 Checkmarx 掃出有 SQL Injection 的風險。
解法
經過多方的測試,發現 Checkmarx 並不認得上述的那種做法,所以就改用匿名物件放在Query的第二個參數之中才會 Pass ,如下,
1 | IEnumerable<Table1> results = connection.Query<Table1>(sql, new { name }); |
- 註: 感謝同事 unciax_wu 的幫忙