Dans laravel, j'ai défini un privatechannel
pour la diffusion privatechannel
.
La chaîne est la suivante:
Broadcast::channel('user.{token}', function ($user, $token) { return $user->some_unique_token === $token; });
Donc, dans ce cas, je leur révèle l'identifiant de l'utilisateur dans le cadre du processus d'authentification.
Est-ce que Laravel a un autre identifiant d'utilisateur unique que je pourrais utiliser qui ne laisse pas de fuite d'informations sur le nombre d'utilisateurs à l'utilisateur?
Par exemple:
Broadcast::channel('user.{id}', function ($user, $id) { return (int) $user->id === (int) $id; });
Ou devrais-je simplement utiliser quelque chose comme https://hashids.org/php/ pour masquer l'ID utilisateur? (Vous ne savez pas si Laravel est livré avec quelque chose comme ça?)
3 Réponses :
essayez de générer un identifiant d'utilisateur unique (uuid) et faites tout avec uuid, créez une autre colonne de uuid dans la table des utilisateurs Str::uuid();
cela ne révélera pas l'ID utilisateur Laravel Str Helper pour uuid
le meilleur moyen pour cela est d'utiliser un algorithme de hachage bidirectionnel comme les hachages même dans JWT pour empêcher que user_id ne soit révélé à l'aide de hachages est l'un des meilleurs moyens
En fin de compte, je viens de créer une méthode de hachage simple pour le modèle utilisateur, puis je l'ai utilisée à la place de l'ID pour valider l'utilisateur.
C'était la méthode ajoutée au modèle utilisateur:
Broadcast::channel('user.{hash}', function ($user, $hash) { return $user->hash() === $hash; });
Ensuite, la chaîne de diffusion va comme ceci:
public function hash(){ return hash('sha256',$this->id.env('APP_KEY')); }
Vous pouvez stocker un jeton d'identifiant unique avec l'ID et le montrer à la place, mais quel est le problème en leur montrant leur ID?
Je n'aime pas révéler le nombre d'utilisateurs que j'ai
L'ID ne reflète pas nécessairement cela, l'utilisateur avec l'ID 10 ne sait pas combien d'utilisateurs ont été enregistrés depuis. Oui, vous pouvez simplement créer un nouvel utilisateur et vérifier l'ID de celui-ci, mais quel est le gros problème - je ne vois pas le problème? Si c'est vraiment un problème majeur, générez simplement un UUID pour l'utilisateur et utilisez-le.