Unsafe Rust vous donne plus de contrôle sur la mémoire. Apprenez à travailler avec Rust non sécurisé et comprenez les risques inhérents à son utilisation.

Les garanties de sécurité de la mémoire sont l'un des arguments de vente de Rust; Cependant, Rust n'est pas à l'abri des bogues et des vulnérabilités. Comme le vérificateur d'emprunt de Rust applique le modèle de propriété, il y a un léger compromis dans le temps de compilation lors des contrôles de sécurité.

Rust fournit une fonctionnalité permettant de contourner les contrôles de sécurité dans une fonctionnalité appelée "Unsafe Rust" qui vous permet d'éviter ces contrôles de sécurité à des fins de performances. Unsafe Rust est un outil puissant pour écrire un logiciel système efficace de bas niveau avec Rust.

Comprendre la rouille dangereuse

Unsafe Rust est un ensemble de fonctionnalités que vous pouvez utiliser pour contourner les garanties de sécurité de Rust en échange d'un meilleur contrôle de la mémoire. Les fonctionnalités non sécurisées de Rust incluent des pointeurs bruts, des fonctions non sécurisées et des traits non sécurisés.

Le but de Rust unsafe est de fournir aux développeurs la possibilité d'écrire du code système de bas niveau sans sacrifier les performances. Vous pouvez accéder et manipuler directement les ressources mémoire et augmenter les performances de votre application avec Rust non sécurisé.

Unsafe Rust est particulièrement utile dans le développement de systèmes d'exploitation, la programmation réseau et le développement de jeux, où les performances sont essentielles. Dans ces contextes, vous aurez besoin d'un contrôle précis sur la disposition de la mémoire du programme et le comportement du code. Unsafe Rust vous permet d'y parvenir en fournissant des abstractions de bas niveau pour la mise en œuvre d'algorithmes et de structures de données complexes.

Travailler avec de la rouille dangereuse

Les blocs non sécurisés fournissent la fonctionnalité permettant d'utiliser des fonctionnalités non sécurisées de Rust. Vous utiliserez le peu sûr mot-clé pour définir des blocs non sécurisés contenant du code Rust valide.

Voici comment vous pouvez utiliser un bloc non sécurisé pour un accès direct à la mémoire pour la modification de valeur :

fnprincipal() {
laissermuet x = 10;

peu sûr {
laisser brut = &muet X comme *mueti32;
*brut = 20;
}

imprimez !("x est maintenant {}", X);
}

Le X variable est un entier mutable. Dans le peu sûr block, le pointeur brut vers X attribue une nouvelle valeur à X. Le code dans le peu sûr le bloc est valide mais pas sûr et n'était pas dans un bloc non sûr; le programme plante.

De plus, vous pouvez définir des fonctions non sécurisées en ajoutant le peu sûr mot-clé avant le fn mot-clé dans vos déclarations de fonction.

peu sûrfneffectuer_unsafe_operation() {
// Votre code non sécurisé ici
}

Vous aurez besoin d'un bloc non sécurisé pour appeler des fonctions non sécurisées dans d'autres parties de votre programme.

fnprincipal() {
peu sûr {
perform_unsafe_operation();
}
}

Fonctions de marquage avec les peu sûr mot-clé ne signifie pas que la fonction est intrinsèquement dangereuse. Cela indique que la fonction contient du code qui nécessite une attention particulière lors de son utilisation.

Les risques associés à l'utilisation de rouille non sécurisée

Une mauvaise utilisation de Rust non sécurisé peut entraîner des erreurs de mémoire, des courses de données et d'autres vulnérabilités de sécurité. Par conséquent, il est crucial de comprendre les risques tout en suivant les meilleures pratiques associées à Rust non sécurisé pour écrire du code sécurisé et performant.

Le principal risque associé à Rust non sécurisé est le potentiel de bogues liés à la mémoire pouvant entraîner des plantages, des vulnérabilités de sécurité et des comportements de code indéfinis.

Les erreurs de mémoire se produisent lorsqu'un programme tente d'accéder à la mémoire de manière anormale; le programme finit par planter ou se comporte de manière imprévisible.

Les courses de données se produisent lorsque deux ou plusieurs threads de programme accèdent simultanément au même morceau de mémoire, et à au moins un des threads modifie la valeur en mémoire, provoquant ainsi le comportement du programme de façon inattendue.

Vous pouvez déclencher des débordements de tampon en utilisant de manière inappropriée Rust non sécurisé. Les débordements de tampon se produisent lorsqu'un programme écrit des données au-delà de la fin d'un tampon. Les débordements de tampon peuvent provoquer le plantage du programme ou permettre à des attaquants d'exécuter du code arbitraire.

Une autre vulnérabilité est use-after-free (UAF) qui se produit lorsqu'un programme accède à la mémoire après la désallocation de valeur. UAF peut entraîner un comportement imprévisible du programme et potentiellement introduire des vulnérabilités de sécurité.

En raison de ces vulnérabilités, lorsque vous travaillez avec Rust non sécurisé, il est essentiel de comprendre la propriété de Rust et comment fonctionne le modèle d'emprunt dans Rust tout en suivant les bonnes pratiques.

La gestion de la mémoire de Rust est flexible

Le modèle de propriété de Rust gère automatiquement la mémoire, réduisant ainsi le risque de bogues liés à la mémoire. L'emprunt permet à plusieurs variables d'accéder simultanément aux mêmes ressources mémoire sans conflits.

La gestion de la mémoire de Rust offre la flexibilité, la sécurité et les performances nécessaires au développement de logiciels modernes, faisant de Rust un outil puissant pour écrire du code efficace et fiable.