Quelques potentiels problèmes avec zeromq, sans avoir regardé le design exact autour de ton logiciel :
1 - zeromq ne peut communiquer qu'avec des pairs de confiance. Le code est rempli d'assertions et il est trivial de le faire crasher dans tous les sens.
2 - Tu sembles utiliser des sockets Req/Rep, qui sont fragiles et généralement une mauvaise idée. Chaque pair doit absolument alterner req et rep ou le socket "explose". Le modèle "je reçois des requêtes et renvoie une réponse par requête" est mieux implémenté avec des sockets utilisant des en-têtes (se référer à l'excellent zmq:guide pour des implémentations "solides").
3 - Il faut autant que possible définir une "low watermark" sur les sockets, si tu ne le fais pas déjà. Si les clients envoient des requêtes mais ne sont jamais là pour recevoir la réponse (client qui meurt prématurément ou est déconnecté, potentiellement un attaquant) les messages s'empilent au cas, où ils réapparaitraient plus tard. Sans "watermark", ils s'empilent indéfiniment et peuvent manger toute la mémoire.
Si tu as le temps, merci d'avance de m'indiquer l'état du code vis-à-vis de ces problèmes :)
# Problèmes potentiels avec zmq
Posté par Pierre Carrier . En réponse au journal Solution d'authentification par mot de passe unique. Évalué à 6.
Quelques potentiels problèmes avec zeromq, sans avoir regardé le design exact autour de ton logiciel :
1 - zeromq ne peut communiquer qu'avec des pairs de confiance. Le code est rempli d'assertions et il est trivial de le faire crasher dans tous les sens.
2 - Tu sembles utiliser des sockets Req/Rep, qui sont fragiles et généralement une mauvaise idée. Chaque pair doit absolument alterner req et rep ou le socket "explose". Le modèle "je reçois des requêtes et renvoie une réponse par requête" est mieux implémenté avec des sockets utilisant des en-têtes (se référer à l'excellent zmq:guide pour des implémentations "solides").
3 - Il faut autant que possible définir une "low watermark" sur les sockets, si tu ne le fais pas déjà. Si les clients envoient des requêtes mais ne sont jamais là pour recevoir la réponse (client qui meurt prématurément ou est déconnecté, potentiellement un attaquant) les messages s'empilent au cas, où ils réapparaitraient plus tard. Sans "watermark", ils s'empilent indéfiniment et peuvent manger toute la mémoire.
Si tu as le temps, merci d'avance de m'indiquer l'état du code vis-à-vis de ces problèmes :)