web-dev-qa-db-fra.com

Laravel attributs cachés. par exemple. Mot de passe - sécurité

Selon http://laravel.com/docs/eloquent , il est possible de masquer des attributs dans une conversion Array ou JSON en utilisant une variable protégée $ hidden dans le modèle.

class User extends Eloquent {
    protected $hidden = array('password');
}

Excellent, cependant, lors de l'exécution de print_r(User::all()), le mot de passe chiffré est envoyé du serveur au client à l'intérieur de l'objet Utilisateur.

Ceci ne se limite pas à print_r (), si l'utilisateur spécifique est interrogé, $user->password affichera le mot de passe crypté dans la vue.

Y a-t-il un moyen d'arrêter cela? Chaque fois que mon objet utilisateur est interrogé, le mot de passe est envoyé avec les données, même s'il n'est pas nécessaire.

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
    (
        [0] => User Object
            (
                [hidden:protected] => Array
                    (
                        [0] => password
                    )

                [connection:protected] => 
                [table:protected] => 
                [primaryKey:protected] => id
                [perPage:protected] => 15
                [incrementing] => 1
                [timestamps] => 1
                [attributes:protected] => Array
                    (
                        [id] => 1
                        [email] => [email protected]
                        [first_name] => Admin
                        [last_name] => User
                        [password] => $2y$10$7Wg2Wim9zHbtGQRAi0z6XeapJbAIoh4RhEnVXvdMtFnwcOh5g/W2a
                        [permissions] => 
                        [activated] => 1
                        [activation_code] => 
                        [activated_at] => 
                        [last_login] => 
                        [persist_code] => 
                        [reset_password_code] => 
                        [created_at] => 2013-09-26 10:24:23
                        [updated_at] => 2013-09-26 10:24:23
                    )
16
Gravy

Lorsque vous exécutez User::all(), un objet Collection est renvoyé. Cette collection contient tous vos utilisateurs sous forme d'objet . Par conséquent, vos utilisateurs contiendront leurs mots de passe. Cela vous permet d'afficher le mot de passe haché pour une raison quelconque. Toutefois, comme vous l'avez dit précédemment, si vous transformez la collection ou les utilisateurs en tableaux ou en JSON, le champ du mot de passe devrait disparaître s'il était masqué.

Par conséquent, si vous souhaitez vous en débarrasser, exécutez la commande suivante:

$array_of_users = Users::all()->toArray();
$json_of_users = Users::all()->toJson();

dd() ces deux pour les inspecter. Le champ mot de passe sera parti.

Ceci est expliqué dans la documentation de Laravel sur serialization .

27
searsaw

Non, car vous ne devriez PAS faire quelque chose comme ça en production (ou dans le monde réel).

Vos vues, écrites dans Blade, peuvent recevoir un résultat User::all() et le traiter, mais il s’agit de PHP (serveur), et non de HTML (client), qui transformera ces données en HTML avant de les transmettre au client. .

Donc ça

print_r(User::all())

C’est quelque chose que vous ne ferez jamais pour montrer à un utilisateur, c’est quelque chose que nous utilisons pour déboguer, mais cela ne signifie vraiment rien.

Mais si vous avez d'autres exemples, lorsque des données sensibles peuvent être transmises à un client via une vue, nous pouvons en discuter également.

3

Dans laravel, si vous retournez un objet de modèle dans le contrôleur représentant une entité, il sera converti en JSON.
C’est utile pour la création d’API, et ses champs cachés aident beaucoup

0
palash140