【问题标题】:Would sending eloquent to view safe in laravel?发送 eloquent 在 laravel 中查看安全吗?
【发布时间】:2020-05-17 20:07:36
【问题描述】:

我刚开始学习 laravel 编程,当我不得不使用 foreach 打印出一些带有 id 的用户数据时,

喜欢

{{ $user->username }}
{{ $user->somedata1 }}

而其他部分看起来像

路线

Route::get('/some/{user}', 'SomeController@show');

控制器

public function show(User $user){

return view(some.show)->with('user' $user)
}

用户表

id
username
somedata1
somedata2
password
addr
birthday
...

我开始想这不会调用其表格行中的每个数据,然后从中打印出用户名吗?因此冒着某种安全问题的风险,比如暴露密码、地址等敏感数据?

如果是这样,我怎样才能隐藏特定的列不被调出?我必须从控制器手动准备数据吗?

添加: 示例中的控制器是否返回其行中的所有内容?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    如果您希望从检索到的数据中隐藏特定列,您应该为您的模型定义一个$hidden 属性:

    class User extends Model
    {
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = ['password','address'];
    }
    

    【讨论】:

      【解决方案2】:

      首先,即使您将密码暴露给视图,鉴于您使用的是 Laravel 的身份验证脚手架,也不必担心,因为密码是通过 bcrypt 散列的。任何经过哈希处理的字符串都无法反转。

      其次,你可以利用 Eloquent 的select() 方法。你可以这样做:

      Model::select('column_1','column_2')->where('column_1', 'value')->get();
      

      我认为这解决了你的问题。

      【讨论】:

      • 感谢您的回答!但我忘了问控制器是否返回其行中的所有内容.. 是吗?
      • 每次调用该模型时都必须使用select() 有点麻烦。最好按照其他答案的建议做,并在模型上使用$hidden
      猜你喜欢
      • 2016-09-16
      • 2021-01-30
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多