2016-01-27 21:52:05 4196次浏览 2条回答 1 悬赏 10 金钱

PHP刚学半年,yii2摸索了也有几个月了,。但有两个问题一直困扰我- -
在慕课网上和同学了解一点防范sql注入,xss攻击啥的,也没了解透。。就是照着做了几个例子。还了解了单例模式工厂模式什么的。然后他们会在用yii2做东西时,自己再写单例、工厂、自己写那几个防sql注入防什么攻击的函数进去。但我一直觉得没必要。。。故来求证下。
1,用yii2 输入框传过来的值 存入数据库、对数据库操作,还需要防范sql注入啥的嘛。因为我感觉噶- -,yii2作为这么吊的一个框架这些基本的安全问题 ,底层啥的肯定都已经考虑到这些问题了吧?
2,new 一个model的时候,还需要自己写单例模式嘛。。

求解

最佳答案

  • yidashi 发布于 2016-01-28 10:42 举报

    。。说实话,yii框架本身对post没有任何过滤的, \Yii::$app->request->post()就是$_POST,看源码就知道了。不过你用框架自带的ar操作数据库,where条件不用字符串形式是会自己防sql注入的。使用框架自带的activeForm来提交表单能防csrf攻击,所有显示用户输入内容的地方严格使用Html::encodeHtmlPurifier::process来过滤能防xss。

    至于new model使用单例。。呵呵。

    3 条回复
    回复于 2016-01-28 13:45 回复

    指点的很好,之前没有去测试过,看了你的回答 我去看了一下源码 yii\web\request getBodyParams 确实也是 $_POST

    回复于 2016-01-28 17:58 回复

    多谢!!!“where条件不用字符串形式”,那是用变量的形式吗? 大神,这些能防csrf,能防xss这些你是从哪里看的,源码该用什么姿势更好阅读呀

    回复于 2016-01-28 18:37 回复

    where(['id' => $xxx]),用数组形式

    文档

  • 回答于 2016-01-28 09:09 举报

    1、安全:YII确实已经做了防范,只要用yii给出的接收数据方法就能起到一定的安全防护作用。
    如:
    yii2接收post数据 \Yii::$app->request->post() ,方法会过滤或者转义一些字符, 但是也会有些人依然用原生的 $_POST[] 来获取,这样写就跟框架本身没什么关系,是搬码猿的问题。所以用YII自带的方法是有一定的安全作用的,不需要自己去写。
    可能是人家想给看教程的同学讲解原理,才会自己写过滤方法, 不然你只知道YII安全,但是为什么安全?安全在哪里?有没有了解呢?

    2、单例模式是为了节省系统资源,一个类只能实例化一个对象。最经典的就是 数据库连接类:程序执行一次,打开一个连接就够了。
    在YII框架中自己写单例模式看情况而定,反正我是没写过。
    人家的视频教程我觉得应该是要讲解原理的东西,而不是说让你们这样做。

    当然 还有一种情况,你的水平极高,你发现yii框架过滤的不够安全,你可以自己写安全方法。

    3 条回复
    回复于 2016-01-28 09:55 回复

    涨姿势了~ thanks

    回复于 2016-01-28 10:06 回复

    你能有收获就是对我最大的感谢,我的字没有白打.

    回复于 2016-01-28 17:55 回复

    感谢!!视频里是原生的php的防范,单例的讲解,然而我想yii应该自己实例化的时候会执行单例吧= =

您需要登录后才可以回答。登录 | 立即注册
皮丘吉尔
助理

皮丘吉尔

注册时间:2016-01-27
最后登录:2016-10-28
在线时长:7小时53分
  • 粉丝1
  • 金钱60
  • 威望0
  • 积分130

热门问题