Remarque:
Beaucoup de gens semblent confondre une URL "privée" avec l'authentification. En outre, il semble y avoir une certaine confusion quant au fait que l’envoi du lien via une entité de confiance est une tentative d’authentification à deux facteurs. Pour être clair, nous parlons d'une ressource accessible au public, même si elle est suffisamment difficile à deviner.
Lorsque vous utilisez une URL privée, vous devez toujours supposer que celle-ci peut être compromise - vous devez concevoir une telle URL de sorte que même si elle est compromise, la ressource ne transmettra pas d'informations à l'attaquant.
Les URL privées / difficiles à deviner ne sont pas équivalentes à l'authentification par mot de passe. Par nature, les URL privées ne sont pas du tout privées - elles sont des ressources accessibles au public. Je pense que le terme URL "privée" est un terme impropre, mais plutôt "obscur".
Dans certains cas, l’utilisation d’une URL "privée" est acceptable, mais elles sont intrinsèquement moins sécurisées que les méthodes d’authentification traditionnelles telles que l’authentification par mot de passe ou l’authentification par clé.
Voici quelques exemples d'URL "privées" couramment utilisées:
- Mot de passe réinitialiser les emails
- Email de génération de certificat
- Email de confirmation de compte / email
- Livraison du contenu acheté (ebooks, etc.)
- Autres choses diverses comme l'enregistrement de vol, l'impression de la carte d'embarquement, l'utilisation d'URL privées en plus de l'authentification traditionnelle
Le point commun ici est que les URL aléatoires ne conviennent généralement que pour des opérations ponctuelles. En outre, l'authentification traditionnelle et les URL aléatoires ne s'excluent pas mutuellement . En fait, elles peuvent être utilisées conjointement pour renforcer la sécurité lors de la livraison d'une ressource.
Comme Robert Harvey l'a souligné, le seul moyen d'utiliser de manière sécurisée une URL aléatoire / privée est de générer la page de manière dynamique et de soumettre l'URL à l'utilisateur de manière à ce qu'il puisse être considéré comme semi-authentifié. Cela pourrait être un email, SMS, etc.
Une URL privée / générée aléatoirement a généralement quelques propriétés:
- Il devrait expirer après un délai raisonnable
- Il devrait s'agir d'une URL à usage unique: IE, elle devrait expirer après le premier accès.
- Il doit reporter l'authentification de l'utilisateur à une autre entité en laquelle il fait confiance pour l'authentifier de manière sécurisée. (En envoyant le lien par e-mail ou SMS, etc.)
- Il devrait être impossible pour un ordinateur moderne de forcer brutalement l'URL dans le délai précédant l'expiration, soit en limitant le débit de l'API qui expose la ressource, soit en créant un point de terminaison url avec une entropie suffisante pour ne pas le deviner.
- Il ne devrait pas y avoir de fuites d'informations sur l'utilisateur. IE: si la page doit réinitialiser un mot de passe: la page ne doit pas afficher les informations du compte du demandeur. Si Alice demande un lien de réinitialisation de mot de passe et que Bob devine l’URL, Bob ne devrait avoir aucun moyen de savoir quel mot de passe il réinitialise.
- En cas de fuite d'informations sur l'utilisateur, il convient de l'utiliser en plus de l'authentification traditionnelle. Par exemple, une page peut considérer un utilisateur authentifié s'il possède un cookie ou si son identifiant de session est toujours valide.
Différentes ressources nécessitent différents niveaux de sécurité. Si vous souhaitez partager une recette secrète avec des amis, par exemple, il serait acceptable d'utiliser une URL aléatoire / privée pour la partager avec eux. Toutefois, si la ressource pouvait être utilisée pour voler l’identité d’une personne ou compromettre ses comptes avec d’autres fournisseurs de services, il serait probablement plus important de restreindre l’accès à cette ressource.