首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在动态的地方防止MySql注入?

如何在动态的地方防止MySql注入?
EN

Stack Overflow用户
提问于 2020-11-10 19:27:49
回答 1查看 44关注 0票数 0

我在我的C# WEBApi项目中有一个应用程序接口,它从我的MySQL DB中返回一些项。

要返回的数据在表格中设置了可见性,API调用中设置的参数表示应该显示哪种类型的数据,例如,如果我在网站的外卖路径中,我发送到API“外卖”,我应该只选择标志外卖打开的数据。

因此,我有我的方法来获取数据,但我认为建议在查询中使用MySQL注入作为字符串连接,所以基于类型,我将where设置为:

代码语言:javascript
复制
        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中进行如下设置:

代码语言:javascript
复制
            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;";

然后我执行该查询,如下所示:

代码语言:javascript
复制
MySqlDataAdapter mySqlDataAdapter = new MySqlDataAdapter(query_plu, connection);

但是,如何防止在动态where查询中连接字符串呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-10 19:42:15

您的代码看起来很安全。尽管您是动态生成查询字符串的一部分,但应用程序端的switch语句确保不会通过任何恶意值。

但是,您可以将逻辑移动到查询本身,从而避免动态构建查询的需要。

代码语言:javascript
复制
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表示一个查询参数,您可以将该参数从应用程序传递给查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64768051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档