我在我的C# WEBApi项目中有一个应用程序接口,它从我的MySQL DB中返回一些项。
要返回的数据在表格中设置了可见性,API调用中设置的参数表示应该显示哪种类型的数据,例如,如果我在网站的外卖路径中,我发送到API“外卖”,我应该只选择标志外卖打开的数据。
因此,我有我的方法来获取数据,但我认为建议在查询中使用MySQL注入作为字符串连接,所以基于类型,我将where设置为:
switch (type)
{
case "TAKEAWAY":
VISIBILITY = "vis.TAKEAWAY_VIS = 'SI' ";
break;
case "ASPORTO":
VISIBILITY = "vis.ASPORTO_VIS = 'SI' ";
break;
case "ECOM":
VISIBILITY = "vis.ECOMMERCE_VIS = 'SI' ";
break;
}并在query中进行如下设置:
var query_plu = @"SELECT
ID_MENU_PRP,
ID_PLUREP,
CODICE_PRP,
des.ESTESA_DES,
UM_PRP
FROM
vo_plurep plu
INNER JOIN
vo_visibility vis ON plu.ID_PLUREP = vis.ID_PLUREP_VIS
WHERE " + VISIBILITY + @"
AND plu.ATTIVO_PRP = 'True'
ORDER BY MENU_PRP ASC, des.ORDER_DES ASC;";然后我执行该查询,如下所示:
MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(query_plu, connection);但是,如何防止在动态where查询中连接字符串呢?
发布于 2020-11-10 19:42:15
您的代码看起来很安全。尽管您是动态生成查询字符串的一部分,但应用程序端的switch语句确保不会通过任何恶意值。
但是,您可以将逻辑移动到查询本身,从而避免动态构建查询的需要。
SELECT
ID_MENU_PRP,
ID_PLUREP,
CODICE_PRP,
des.ESTESA_DES,
UM_PRP
FROM vo_plurep plu
INNER JOIN vo_visibility vis ON plu.ID_PLUREP = vis.ID_PLUREP_VIS
WHERE
plu.ATTIVO_PRP = 'True'
AND (
(@type = 'TAKEAWAY' AND vis.TAKEAWAY_VIS = 'SI')
OR (@type = 'ASPORTO' AND vis.ASPORTO_VIS = 'SI')
OR (@type = 'ECOM' AND vis.ECOM_VIS = 'SI')
)
ORDER BY MENU_PRP ASC, des.ORDER_DES ASC@type表示一个查询参数,您可以将该参数从应用程序传递给查询。
https://stackoverflow.com/questions/64768051
复制相似问题