mirror of
https://github.com/tobycroft/gorose-pro.git
synced 2026-04-22 15:47:04 +08:00
1.7 KiB
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的安全说明,不过数据库这块也差不多就是我上面说的这些内容