【问题标题】:Yii: prevent sensitive data from loading via relationsYii:防止敏感数据通过关系加载
【发布时间】:2014-05-27 07:55:37
【问题描述】:

例如,我有一个名为 Entity 的模型和一个名为 User 的模型。每个实体BELONGS_TO 一个用户。建立关系的完美案例。

仍然用户包含一些敏感数据,例如密码。在请求 entity-with-user 时,如何防止加载这些数据?

P.S. 我知道最好设计您的数据库架构来分离身份验证数据和公开可用的数据。例如。将密码存储在 User 模型中,将用户名存储在 Profile 模型中。我的问题仍然是如何在呈现的情况下保持安全。

【问题讨论】:

    标签: database security yii relationship


    【解决方案1】:

    我认为可以使用这样的东西:

    public function relations()
    {
    
        return array(
                'user' =>  array(self::BELONGS_TO,'User','id_field','select'=>'name,surname,otherfield1,field2'),
        );
    }
    

    更新

    如果您想限制 User 模型中的一般字段,您可以尝试使用 defaultScope 结合使用 scenarios 来确定何时可以选择所有字段。

    public function defaultScope()
    {
        if ( $this->scenario != 'yourScenario' ) {
          return array(
              'select'=>"name,surname,otherfield1,field2",
          );
        } else {
          return array();
        }      
    }
    

    【讨论】:

    • 可能有效,但这意味着具有这种关系的每个模型都对安全问题负责。有没有办法在用户模型中做到这一点。例如。限制加载密码字段,除非另一个模型明确要求?
    猜你喜欢
    • 2015-05-21
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2012-07-23
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多