J'utilise BreezeJS et j'ai une question concernant la façon dont les données sont sauvegardées. Voici mon code et les commentairesBreezeJS SaveChanges() problème de sécurité
[Authorize]
/*
* I want to point out the security hole here. Any Authorized user is able to pass to this method
* a saveBundle which will be saved to the DB. This saveBundle can contain anything, for any user,
* or any table.
*
* This cannot be stopped at the client level as this method can be called from Postman, curl, or whatever.
*
* The only way I can see to subvert this attack would be to examine the saveBundle and verify
* no data is being impacted that is not owned or related directly to the calling user.
*
* Brute force could be applied here because SaveResult contains Errors and impacted Entities.
*
*/
[HttpPost]
public SaveResult SaveChanges(JObject saveBundle)
{
return _efContext.SaveChanges(saveBundle);
}
Pour limiter l'accès à une capacité d'appelants pour récupérer des données I premier extrait du access_token le user_id et limiter toutes mes questions à inclure dans une clause where, ce qui rend un peu impossible pour un utilisateur pour récupérer les données d'un autre utilisateur. Mais cela n'empêcherait pas un utilisateur non autorisé qui avait un access_token valide d'appeler SaveChanges() dans une boucle de force brute avec des identifiants d'objets incrémentiels.
Suis-je loin de celui-ci? Peut-être qu'il me manque quelque chose.
Merci pour toute aide.
Mike
Vous ne connaissez pas Breeze, mais vous semblez avoir mis en place un contrôle d'accès approprié. C'est également une bonne pratique d'utiliser l'aléatoire cryptographique pour générer vos identifiants d'objet, mais cela est en fait secondaire à la mise en œuvre d'un contrôle d'accès approprié. En termes de SaveChanges(), vous pouvez vouloir limiter le nombre d'opérations de sauvegarde que l'utilisateur peut faire - sinon il peut remplir votre db avec des indésirables. – TheGreatContini