sql 防止注入,用 base64 对用户输入内容进行预处理,是否可行?

2019-02-14 15:05:05 +08:00
 mostkia

如题,相对于 PDO 来讲,肯定是 PDO 更好,但按照题目里的说法,是否可行呢?(我使用的是 SQLite )

10162 次点击
所在节点    MySQL
77 条回复
iyaozhen
2019-02-14 21:38:50 +08:00
666
仔细一想,别说还真行。索引也有,like 查询其实也行
除了存储大小会变大点
msg7086
2019-02-14 22:44:19 +08:00
可以,但是意义不大。
madNeal
2019-02-14 22:56:00 +08:00
使用现有的 sql 参数化方法比自己想办法造轮子有效得多
reself
2019-02-14 23:34:26 +08:00
你怕是对 SQL 注入的理解有误。
reself
2019-02-14 23:36:42 +08:00
抱歉,貌似确实能起到类似转义的作用。
whoami9894
2019-02-14 23:41:11 +08:00
如果是数据库所有字段都是 b64 编码内容,那么是可以的
比如拼接 sql 查询时 select * from users where uname = '{param}',b64 可以保证不会闭合掉前面的单引号,但这么麻烦为什么不直接参数化 sql 语句呢
claysec
2019-02-14 23:44:55 +08:00
楼主是想防止二次 SQL 注入吗。。
yuikns
2019-02-15 00:08:37 +08:00
其实是可以的。只要没有 like 查询。其实就是利用 b64 字符集没有比较危险的那几个特殊字符。怎么这么多人死活不理解别人的中文呢

但是,现在一个 prepared statement 能解决的问题没必要那么复杂
glishijie
2019-02-15 00:12:55 +08:00
@mostkia 可以的
just1
2019-02-15 03:30:15 +08:00
是可以的,楼上很多人怕是对注入有误解
all4fun
2019-02-15 06:29:30 +08:00
直接参数化比较好吧
q397064399
2019-02-15 07:20:56 +08:00
一般 orm 都做掉了,自己弄这个 真的是蛋疼
jalja27
2019-02-15 07:52:41 +08:00
以我的经验来看,sql 注入的问题有直接的解决方案,就用这个方案。用编码这种间接的,中间多了一层数据转换逻辑,扩展性和其它关联影响是很大的隐患,特别是多人开发的团队中
reus
2019-02-15 08:25:22 +08:00
我看你是不知道 SQL 可以传参数吧。
paranoiagu
2019-02-15 08:35:16 +08:00
数据库存了 base64 后的数据,你查询 like 怎么搞?
查出来的数据都要解码显示,性能行不行?
lzxz1234
2019-02-15 08:44:47 +08:00
内容编码入库是常用的,但依赖这种方式防注入也太低级了
huahuajun9527
2019-02-15 09:02:05 +08:00
你的意思是查询字符串只允许是 base64 的字符集里的,包含其他的字符就不放进去查询???
master13
2019-02-15 09:06:04 +08:00
其实在做软件工程的时候,我们经常会遇到一个问题就是:业内通常怎么做。你说的方法也可以,但是不利于后期业务数据分析处理。方法可行,但业内不这么做,肯定是有它的道理。
firechat
2019-02-15 09:23:20 +08:00
给我的感觉就是放着圆的轮子不用,要造一个方的轮子。
直接用现有的 sql 防注入方案就行了
xmdbb
2019-02-15 09:23:23 +08:00
可以肯定可以,但是我只想问问,ID 系列的你怎么处理,难不成整个自增 ID 你都用 BASE64 吧?

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

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

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

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

© 2021 V2EX