各位大佬, mysql 中模糊查询 % 和 _这个特殊符号的有什么解决方法?传递特殊符号会有注入问题么?有的话一般怎么解决?

2019-12-26 09:55:58 +08:00
 autung
3769 次点击
所在节点    程序员
27 条回复
Mogamigawa
2019-12-26 09:59:33 +08:00
放心, SQL 注入是过去时了, 现在的框架都可以抵御 SQL 注入.
ThirdFlame
2019-12-26 10:01:47 +08:00
@Mogamigawa 不不不 框架有能力 ,不代表你就写不出来 sql 注入。
xiaochun41
2019-12-26 10:17:04 +08:00
当你需要引用外部输入的变量去构建 sql 语句时候,对输入进行转义就可以了。
具体如何转义,各个语言的 mysql api 一般都有提供方法。
autung
2019-12-26 10:21:22 +08:00
这种广泛存在的问题应该是有规范的吧,有些网站是可以是用全部特殊符号,但是有些网站又会限制某些特殊符号,但是用提示和过滤显得有些麻烦,总不能每个接口有用户输入都要做这些提示吧,且这些特殊符号也有相应的使用场景,啊想想这一连串的问题,真是莫名的头大,而我只是一个改 bug 的垃圾小前端! want to go die !
autung
2019-12-26 10:23:22 +08:00
@xiaochun41 我们老大说会有注入问题应该避免传特殊符号,我觉得这并不是一个好的方式,毕竟会莫名的增添很多麻烦
manami
2019-12-26 10:24:11 +08:00
使用 mysql 的预编译语句可有效防止 sql 注入
````
// 省略……
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(xxx)
// 省略……
````
manami
2019-12-26 10:29:02 +08:00
使用了预编译语句,特殊符号当成普通参数一样插入就行
xiaochun41
2019-12-26 10:31:18 +08:00
@autung 你也可以直接在获取输入的地方,统一做一下,并不算麻烦。
sx90
2019-12-26 10:31:55 +08:00
连 CPU 也有 BUG

不嫌累,不嫌加载过慢,就层层加密,层层审计

一般,直接用框架,多快好省
autung
2019-12-26 10:32:47 +08:00
@manami 下次让后端小伙子自己试试
manami
2019-12-26 10:34:47 +08:00
@autung 卧槽刚仔细看了下与预编译不能处理%和_特殊字符
manami
2019-12-26 10:35:23 +08:00
那只能在执行 sql 语句前对参数进行过滤了
VictorJing94
2019-12-26 10:38:30 +08:00
关键词在后台过滤一下
autung
2019-12-26 10:45:11 +08:00
@VictorJing94 我觉得这才是最正确的答案,毕竟前端的传递的内容和方式都不能信任
aguesuka
2019-12-26 10:47:44 +08:00
用 instr 代替 like %param%查询
hhgfy
2019-12-26 10:47:57 +08:00
% 用 '\' 转义吧
zrc
2019-12-26 10:48:45 +08:00
instr ?
autung
2019-12-26 10:49:46 +08:00
@hhgfy it's right
aguesuka
2019-12-26 10:54:16 +08:00
不同的数据库也提供了转义符,谷歌的关键词叫 sql like ecsape
Felldeadbird
2019-12-26 11:16:34 +08:00
前端不需要刻意处理。后端接收到你提交的数据库后,让后端连接数据库时,基于 SQL 进行预编译处理。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/632422

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX