Files
gorose-pro/doc/security.md
T
2021-09-26 11:56:27 +08:00

1.7 KiB

安全相关

1.都用上prepare了,基本上不会有注入了,这里说个真实的案例,我最早是从PHP过来的,在PHP那边我对prepare滚瓜烂熟 但是毕竟golang是新的战场,再加上orm的不完善,另外就是我的业务逻辑很特殊,所以很多时候是需要直接写SQL语句的, 在早期,我使用query语句的时候,将值直接写到了sql语句中,那么懂行的人就知道这是会导致preparestatement降级成emulate 模式运行的罪魁祸首,并且会导致注入,加之当时比比较赶,又刚学Go,就没注意,就写完当天晚上怎么都睡不着,总感觉代码不对 然后起来看sql这块的,就看到了

db.query("select * from table where user=参数")

当然我不是这么写的拉,只是举个栗子,我那个句子大概写满了半个屏幕,问题点大概是上面这样,直接写参数值的

我一想,不对啊!PHP人家都有处理方法怎么Go没有,我就到gorose开发那边去问,没问出结果,文档也没有

后来我才知道,使用

db.query("select * from table where user=?",[]interface{}{参数})

来查询,所以这里分享给大家

当然我的项目没受到这个影响,毕竟不是B类的项目,不涉及¥没人盯

其他地方的安全问题还有就是在where查询的时候

db.where("user=参数")

也不要这么查询!这样也会导致注入

正确的方法应该是

db.where("user","=",参数)

或者

db.where("user",参数)

你看对于ORM来说,就是这些简单而又细节的地方可能导致你的程序出现风险,所以安全无小事,其他的安全部分, 你可以参考TP的安全说明,不过数据库这块也差不多就是我上面说的这些内容