安全小Bug ,暴露表前缀

测试代码:

public function actionDb_test()

{

Admin::model()->find( 'username = {{aa}}';

}

测试结果:

5646

1.png

源码位置:

5647

2.png

作者,进来看看,sql 中能直接判断 {{}} 进行替换吗? 这样效率也不高。 yii 不是称最好的性能,但是我还是看到了大量的 preg 替换。

我的建议是, 1 , 关闭表前缀,一般自己开发项目用 yii 肯定是独立服务器,不存在一个db 中装多个的问题,这不是做开源cms 。

ps: 我想问一下,作者能看懂中文吧。 网上关于作者的介绍不多,作者是留学生吗, 还是出生在那边?

虽然说,有绑定参数的类似于 java hibernate 的写法,但是,在实际开发中,并不是所有开发人员都会这样做。

我的理解是:

  1. 暴露表前缀的原因是:当前是debug模式的原因吧?

  2. 如果你不想用表前缀你可以在设置里把它关上。我们好多人都关掉的,你不是一个人!

  3. 如果你不想用regex匹配,你可以重写这个类的实现,在你自己的类里面把它拿掉,然后在config里用你的实现替换官方的实现。不过我觉得这属于过早优化。或者你有更好的实现方法可以Pull request给官方。阉掉是不可能的,你不用别人还要用呢。全栈框架要的就是全能,为了性能可能提升个1ms,就去掉核心功能,这个买卖不能干啊。

  4. Yii2 从来没有号称是最好的性能啊。时代在发展,技术在进步没有谁能始终独占鳌头的。框架的复杂度和功能性摆在那里,再快也有限度。据我们群里的大牛测试:要实现现有的功能,用C重写为PHP扩展都不能保证绝对性能的提升。但是你是想要智能机的功能还是功能机的待机时间呢?一样的逻辑。

也可能我的理解有误,可以多交流下。 :rolleyes:

PS:你的测试代码写的真是谜一样啊,什么意思?

关闭debug模式肯定不会出现。