小白求教,关于sql注入的问题 [ 2.0 版本 ]
刚刚看完了慕课的关于yii2的安全教程。
最后一张有说 设置emulateprepare = false
然后使用占位符的方式进行方式sql注入。
我的问题是
- 请问这样就
肯定
能够避免sql注入了吗? - 如果我依然设置
emulateprepare = true
, 那么 我在使用ar
或者query build
的时候 所有的数组方式赋值 是不是根本就不能做到防范sql注入的效果? 如$model->find()->where(['id'=>$id])...
如果使用数组赋值方式不能起到防范sql注入,那么像我这样的小白,yii是否有什么可以依托的相对安全的方式,让我们去操作数据库呢?
当然个人没有测试,对于第二个问题其实可以自己模拟一下的。但是因为水平有限对于各种sql或者url的转码肯定不能做到全面,所以想上来问问各位朋友,请大家分享下经验。谢谢大家~~~
最佳答案
-
$model->find()->where(['id'=>$id])
这样当然不能做到防止sql inject
..第一: 一定要使用占位符,
$model->find()->where( 'id' = :id, [':id' => $id] )
第二: 如果追求更安全, 不要让php帮你自动绑定参数, 而是发送到
mysql
, 让mysql
自己完成参数解析绑定.也就是你说的
emulateprepare = false
其实就是PDO
的PDO::ATTR_EMULATE_PREPARES
这个参数.经过这两步, 就可以完全避免
sql inject
共 1 条回复xjdata 觉得很赞
其他 0 个回答
没有找到数据。
xjdata
注册时间:2011-12-07
最后登录:2024-05-05
在线时长:112小时38分
最后登录:2024-05-05
在线时长:112小时38分
- 粉丝23
- 金钱14169
- 威望75
- 积分16039