首页 > 数据库 >C# mysql where in 查询时参数化的问题

C# mysql where in 查询时参数化的问题

时间:2023-12-11 11:36:25浏览次数:30  
标签:C# mysql 参数 sql table where id select

大家都知道写代码查询sql的时候是需要对传入的变量参数化的,否则就会有sql注入的风险

具体的原因是拼接传入的字符串会被当做sql语句进行解析,如果在传入的参数上做点手脚,就会导致sql的执行超出预期,具有很大的安全隐患,

比如当登陆时传入的sql语句是 select count(*) from table where id=9527 and pwd=xxx,如果传入的xxx=123 or 1=1就会直接饶过密码的判定直接登陆成功

而当使用参数化后实际上传入的sql语句是select count(*) from table where id=?id and pwd=?pwd,具体的数值9527和123 or 1=1则当成参数进行传递,不会影响sql语句的解析,就从根本上避免了sql注入

但是,sql中有一些特殊的语句,比如in,就没办法很方便直接的使用参数化,因为in的语句格式是这样的 select * from table where id in (value1,value2,value3,...)

于是我就研究了下,发现

1,如果写成 select * from table where id in (?ids),除非只有一个值(因为它把?ids当作value1了),否则不会返回有效数据

2,当然咱们也可以为每一个参数都参数化select * from table where id in (?id1,?id2,?id3,...),但是这样又很笨重,让人不爽

3,还可以select * from table where FIND_IN_SET(id,?ids),但是这样会进行全表扫描,肯定也不行

4,有个使用exec动态执行SQL的方法,但是我看见有人说这本质上还是sql拼接,并不能防止sql注入

5,以及使用临时表,具体是将ids作为一个参数传递进去,然后用sql代码分割后存到临时表中,最后联合表查询,因此这个太复杂了,不过当参数比较大的时候不失为一个好办法

6,不用ado了,那玩意太老了,直接用orm框架,比如Dapper,人家都给处理好了,性能也进行了优化,代码还简单

最终我选择了Dapper

 

标签:C#,mysql,参数,sql,table,where,id,select
From: https://www.cnblogs.com/luludongxu/p/17893983.html

相关文章

  • arcgis10.2.2导出电子表汉语乱码解决办法
    一、获取下载:资源下载二、安装:下载目录:1、首先安装“ArcGIS-1022-DT-SSDCP-Patch.msp”补丁;2、开始--运行,输入”Regedit“,打开注册表。3、如是用的是10.x版本ArcGISDesktop,定位到‘MyComputer\HKEY_CURRENT_USER\Software\ESRI\Desktop10.x'如果是9.3.1之前的......
  • CAD2024 下载及安装教程
    一、下载:资源下载二、安装教程:解压之前,关闭杀毒软件(包括系统自带安全中心、第三方安全卫士/杀毒软件等)关闭方法可参考一键关闭Win系统自带杀毒软件/安全中心(附工具下载)适用于所有win系统(1)下载好安装包并解压,就可以得到如下图的文件:(2)用管理员身份运行“主程序”,让主程序......
  • ArcGIS动态表格批量出图
    一.产品介绍:ArcGIS动态表格扩展模块MappingandChartingSolutions,可用于插入动态表格,与数据驱动结合,出图效率无敌。注:优先选择arcgis10.2.2。二、下载连接:资源下载三、下面简要介绍插入动态表格步骤:安装模块,打开Arcgis,点击“自定义”-“扩展模块”,将所有模块都勾上,激活模块......
  • MMORPG-Client-组队
    序言在MMORPG中组队系统是社交向玩法中,重要的一个系统。游戏设计师通常会鼓励玩家进行社交玩法,以提高玩家的“黏度”,于是便诞生出了各式各样的“组队”。组队的玩家往往会比单人获得更好的奖励,且有些玩法可能必须要求组队。而在程序的眼中,组队系统就是一个玩家的集合,维护此集合的......
  • arcgispro3.1(账号登陆)
    下载:资源下载ArcGISPro3.1更新中文概览专注于制图、GIS、Python前言:本次更新给了我两个惊喜,一个是本来ArcMap就有的功能,另一个明显是学习的QGIS,嘿嘿,大家往下看吧。整理翻译了一下官方的ArcGISPro3.1新特性更新概览。最后有视频哦!获取下载连接:` http://dt1.8tupian.n......
  • 比较好用的影像导入CAD插件
    一、获取:资源下载二、使用步骤:1、第一步打开CAD软件,命令行输入appload回车2、出现对话框找到影像导入CAD插件.VLX这个文件,点加载,3、在对话框下面出现加载成功,关闭对话框4、在命令行输入INSG回车5、出现对话框,找到需要的影像直接打开即可。注意:影像tif文件和t......
  • GeminiDB Cassandra接口新特性PITR发布:支持任意时间点恢复
    本文分享自华为云社区《GeminiDBCassandra接口新特性PITR发布:支持任意时间点恢复》,作者:GaussDB数据库。技术背景当业务发生数据损毁、数据丢失、数据误删除等一系列故障场景时,往往需要数据库恢复到故障发生前的某一个时刻,且恢复的颗粒度越小越好。而传统数据库采取周期性备份的......
  • react-query使用
    usequery const{isPending,isLoading,error,data}=useQuery({//返回当前请求的状态,错误信息,以及返回的数据queryKey:['repoData'],//【必填】,自定义查询的键,类型为数组,也可以存放变量,[repoData,id],当id发生变化时,会自动请求接口queryFn:()=>//......
  • arcgis 最全SDK下载
    一、产品介绍:作为开发人员,您可以在自己的制图应用程序中使用我们的高级制图服务,也可以灵活使用ArcGIS系统来满足组织的特定需求。解决方案合作伙伴、集成商和Esri自己的开发人员使用ArcGIS应用程序编程接口(API)和软件开发工具包(SDK)来开发启用位置的产品、解决方案,......
  • Linux学习35- python3.9出现ModuleNotFoundError: No module named '_ctypes'的解决
    遇到问题pip安装第三方库的时候报错ModuleNotFoundError:Nomodulenamed'_ctypes'File"/usr/local/python3/lib/python3.9/ctypes/__init__.py",line7,in<module>from_ctypesimportUnion,Structure,ArrayModuleNotFoundError:Nomodulen......