字符串拼接不能有效防止sql注入吗

gahyyai 2015-02-04 07:53:26
如题,难道字符串拼接没有办法有效防止sql注入吗,必须要改用传参的方式?
...全文
1466 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38290187 2017-10-20
  • 打赏
  • 举报
回复
呵呵 都2017年10月了 还在讨论拼接字符串
不再痴痴迷迷 2017-05-23
  • 打赏
  • 举报
回复
呵呵,都2017年了,还在讨论拼接字符串
kfckcf1997 2017-03-24
  • 打赏
  • 举报
回复
呵呵,都2017年了,还在讨论拼接字符串
猴头 2015-02-06
  • 打赏
  • 举报
回复
拼接 SQl字符串,确实有些落伍,不过,我们部门的项目现在还是采用直连数据库+拼接字符串的方式呢, 但是你要是说一条 sql语句 条件太多,如果采用 拼接字符串的方式,反倒不如采用参数化的方式 明亮呢。
於黾 2015-02-05
  • 打赏
  • 举报
回复
现在问题不是难不难的问题,而是楼主已经懒到一定境界了 最好是什么代码都不用改,在VS的某个选项里打个勾就能解决注入的问题
phommy 2015-02-05
  • 打赏
  • 举报
回复
就拼的sql防注入来说,字符串只要做到Replace(单引号,两个单引号),数值型只要做到拼的真是数字,就一定没问题了 不过参数化在重用查询计划、大字段操作方面是有优势的,能用就用 如果你觉得参数化的代码写起来麻烦,可能是因为没有提取出比较好用的公共方法。如果基础服务写的好的话,参数化的sql写起来并不比拼字符串麻烦。比如参数化后,写出来代码很可能是这样: db.ExecScalar("select Code from Table where ID={0} and Status={1}", 100, "enable") db.ExecScalar("select Code from Table where ID={ID} and Status={Status}", "ID", 100, "Status", "enable")
software_artisan 2015-02-05
  • 打赏
  • 举报
回复
改参数化很麻烦吗?
            var sql = "insert MDG_Employee (MID, Gender, WorkType, IdCardNo, DirectLeader, OfficeAddress, HomeAddress, Photo, EntryDate, DimissionDate, Description, Status, LoginUser, CreatorDeptId, CreatorUserId) select @MID, @Gender, @WorkType, @IdCardNo, @DirectLeader, @OfficeAddress, @HomeAddress, @Photo, @EntryDate, @DimissionDate, @Description, @Status, @LoginUser, @CreatorDeptId, @CreatorUserId";
            SqlParameter[] pam = { new SqlParameter("@MID", SqlDbType.UniqueIdentifier){ Value = d.MID },
                                   new SqlParameter("@Gender", d.Gender),
                                   new SqlParameter("@WorkType", SqlDbType.UniqueIdentifier){ Value = d.WorkType },
                                   new SqlParameter("@IdCardNo", d.IdCardNo),
                                   new SqlParameter("@DirectLeader", SqlDbType.UniqueIdentifier){ Value = d.DirectLeader },
                                   new SqlParameter("@OfficeAddress", d.OfficeAddress),
                                   new SqlParameter("@HomeAddress", d.HomeAddress),
                                   new SqlParameter("@Photo", SqlDbType.Image){ Value = d.Photo},
                                   new SqlParameter("@EntryDate", d.EntryDate),
                                   new SqlParameter("@DimissionDate", d.DimissionDate),
                                   new SqlParameter("@Description", d.Description),
                                   new SqlParameter("@Status", d.Status),
                                   new SqlParameter("@LoginUser", d.LoginUser),
                                   new SqlParameter("@CreatorDeptId", SqlDbType.UniqueIdentifier){ Value = d.CreatorDeptId },
                                   new SqlParameter("@CreatorUserId", SqlDbType.UniqueIdentifier){ Value = d.CreatorUserId },
                                   new SqlParameter("@Read", SqlDbType.Int){ Value = 0 } };
这样的sql很难写吗???
於黾 2015-02-05
  • 打赏
  • 举报
回复
引用 2 楼 gahyyai 的回复:
[quote=引用 楼主 gahyyai 的回复:] 如题,难道字符串拼接没有办法有效防止sql注入吗,必须要改用传参的方式?
过滤sql的关键字是不行的,如select什么的[/quote] 应该过滤参数里的关键字,而不是等拼接完了才过滤 而且参数里有关键字,不是过滤了拉倒,而是直接报出错误,禁止提交 什么用户名里有单引号,这个在insert的时候就已经过滤了,让数据库里的数据不允许出现单引号,或者直接给转义掉 而不是等登陆查询的时候才去过滤
qxyywy 2015-02-05
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
可以防止呀,过虑某些字符就成。
+1 比如update 变更成update
  • 打赏
  • 举报
回复
只想说:凭什么你认为我输入的select,insert是不正确的
WM_JAWIN 2015-02-05
  • 打赏
  • 举报
回复
拼接不利于后期维护
小灰狼 2015-02-05
  • 打赏
  • 举报
回复
有传参数的办法,干嘛那么热衷于拼接SQL语句呢 其实两种办法并不矛盾,你在拼SQL的同时,也可以传参数
1401445147 2015-02-05
  • 打赏
  • 举报
回复
呵呵, 2015年了,还在讨论拼接字符串
狸丶不乖 2015-02-05
  • 打赏
  • 举报
回复
EF的路过
於黾 2015-02-05
  • 打赏
  • 举报
回复
要么就限制长度(当然这样就没法发表文章了,要么文章用文本来存,不要存数据库) 只要限制只允许输入10个字符,保证啥注入语句都写不进去
huwei001982 2015-02-05
  • 打赏
  • 举报
回复
呵呵, 2015年了,还在讨论拼接字符串。。。
  • 打赏
  • 举报
回复
为何要拼接字符串
tcmakebest 2015-02-05
  • 打赏
  • 举报
回复
SQL拼接真太OUT了吧,只要确保单引号变双即可防注入. 但为何要因为坏的习惯而不使用高大上的参数化呢.
  • 打赏
  • 举报
回复
上面删除引用错了,应该是这个
引用 13 楼 gahyyai 的回复:
这些我都和他说过,他不听,非得让改,一个查询,近20个条件,参数化,不说了
  • 打赏
  • 举报
回复
引用 13 楼 gahyyai 的回复:
你老大他只了解表面,华为出来就牛B??? 要非得参数化,那前10年的ASP程序基本都没用参数化的SQL 你让他们怎么办?你老大懂注入么?知道注入的原理么。怎么注入法,我想他不知吧?知道注入是什么时候搞出来的么?
这些我都和他说过,他不听,非得让改,一个查询,近20个条件,参数化,不说了[/quote] 先把你写的贴出来,我们看看是否有逻辑问题。如果没有问题,那么再说人家的要求出现的工程问题。
加载更多回复(17)

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧