2017-02-03 4 views
3

Est-ce que Apache Thrift a une vérification inhérente de l'intégrité des données? Est-ce que cela garantit que les données sont toujours livrées non modifiées? J'envoie de grandes quantités de données binaires sur un service Thrift et je ne suis pas sûr si j'ai besoin de mettre en œuvre une vérification d'intégrité supplémentaire, comme la somme de contrôle MD5.Est-ce que Apache Thrift garantit l'intégrité des données?

+0

La friperie est construite sur des couches réseau normales (TCP) qui ont un tel contrôle. Pour dire vrai, parfois j'implémente le CRC "mon niveau", mais la motivation est d'attraper les erreurs logiques. –

+0

"* Thrift est construit sur les couches réseau normales *" - Thrift n'est pas limité à TCP. Certaines personnes l'utilisent avec des systèmes de bus de messages ou sérialisent la date dans des fichiers. Probablement correct dans le cadre de cette question, mais pas comme une déclaration générale. – JensG

Répondre

2

Non, il n'y a pas de détection d'erreur intégrée. Cette tâche est laissée au développeur et/ou à d'autres parties de la pile de communication.

La première question à poser serait si un simple CRC32 serait suffisant, ou si vous avez besoin d'outils plus puissants, comme certains SHA. L'extrémité supérieure serait probablement une infrastructure crypto à part entière pour signer des messages et vérifier l'authenticité au moyen de clés asymétriques.

Pour chacun de ces cas d'utilisation, de bonnes bibliothèques sont disponibles. Comme d'autres l'ont souligné à juste titre, si le transport repose sur TCP et peut-être même sur TLS/SSL, cela seul pourrait suffire. Il n'est tout simplement pas nécessaire d'inventer cette roue à nouveau. Et, comme indiqué ci-dessus, si vraiment nécessaire la tâche peut facilement être déléguée à un specialized, custom transport implementation comme un "transport en couches", similaire à ce que TFramedTransport fait.

2

Les couches d'Apache Thrift sont explained here. C'est une supposition sensée que les erreurs pourraient se produire seulement dans la couche de transport. Si vous utilisez TCP ou HTTP (qui est basé sur TCP) interfaces de transport, les données seront livrées inchangées, car c'est ainsi que TCP works.

Remarque: Je suppose que la sécurité de votre canal de communication ne vous inquiète pas. Si vous le faites, ni TCP, ni les sommes de contrôle ne vous protégeront contre les modifications de données malveillantes. Dans une telle situation, vous avez besoin d'un tunnel de communication sécurisé comme SSL/TLS. Voir: Thrift/SSL.

+0

"* les données seront livrées non modifiées *" sauf si vous vous retrouvez face à une attaque MITM. Ensuite, les données sont toujours inchangées en termes de TCP, cependant, le résultat final peut ne pas toujours être ce que vous voulez. Juste un exemple où les hypothèses peuvent casser. – JensG

+0

@JensG Bon point. * Juste un exemple où les hypothèses peuvent casser. * Y en a-t-il d'autres? – cubuspl42

+0

Si nous pensons assez longtemps, nous en trouverons quelques-uns. ;-) – JensG