Table des matières
1. Mauvaise méthode de libération de mémoire
2、 错误的内存释放方法的危害
3、示例代码
3.1缺陷代码
3.2 修复代码
3.1 Code défaut
#🎜🎜#3.2 Code de réparation# 🎜🎜 #
Maison Opération et maintenance Sécurité [Defect Weekly] Numéro 31 : Mauvaise libération de mémoire

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire

May 23, 2023 pm 11:07 PM
代码审计

1. Mauvaise méthode de libération de mémoire

Les fonctions courantes d'application de mémoire en langage C incluent malloc( ), realloc(), calloc(), bien qu'ils aient des fonctions différentes, ils correspondent tous à la même fonction de libération de mémoire free() L'application et la libération de mémoire en C++ utilisent new/delete, nouvelle méthode []/delete[]. Qu'il s'agisse du langage C ou du langage C++, lors de l'écriture du code source, vous devez choisir la méthode de libération de mémoire en fonction des différentes méthodes d'application de la mémoire pour éviter d'utiliser la mauvaise version de mémoire. Par exemple : utilisation mixte de l'allocation/libération de mémoire C/C++, ou utilisation mixte de l'allocation/libération de mémoire scalaire et vectorielle. malloc()realloc()calloc(),它们虽然功能不同,但都对应同一个内存释放函数 free(),C++中对内存的申请和释放采用new/delete、new []/delete[] 方式。不管是 C 语言还是 C++ 语言,当编写源代码时要根据内存申请的方法不同来对应地选择内存释放方法,避免使用错误的内存释放。例如:混合使用C/C++的内存申请/释放,或混合使用标量和矢量的内存申请/释放。

2、 错误的内存释放方法的危害

错误地释放内存可能会导致程序出现意料之外的错误行为,甚至导致程序崩溃。在《effective C++(第二版)》条目5“对应的 new 和 delete 要采用相同形式”中指出:“如果错误地释放对象中的元素,可能造成整个对象、甚至整个堆上的内存结构都发生损坏,从而发生内存泄漏,甚至导致程序崩溃”。

在CVE数据库中,也有与此相关的漏洞信息。自2018年1月至2019年4月,CVE数据库中共有3条相关漏洞信息。漏洞信息如下:

CVE 漏洞概况
CVE-2018-14948 dilawar sound2017-11-27 及之前版本中的 wav-file.cc文件存在错误的内存释放方法漏洞 (new[]/delete)。
CVE-2018-14947 PDF2JSON 0.69 版本中的 XmlFonts.cc 文件的‘XmlFontAccu::CSStyle’函数存在错误的内存释放漏洞(new[]/delete)。
CVE-2018-14946 PDF2JSON 0.69 版本中的 ImgOutputDev.cc 文件的 HtmlString 类存在错误的内存方法漏洞 (malloc/delete)。

3、示例代码

示例源于 Samate Juliet Test Suite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp。

3.1缺陷代码

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire

在上述示例代码中,第31行使用 new[] 创建对象数组,在第34行使用 delete 进行释放,由于在释放对象数组时,没有使用 new[] 对应的 delete[],因此存在“错误的内存释放方法”问题。

使用代码卫士对上述示例代码进行检测,可以检出“错误的内存释放方法”缺陷,显示等级为中。如图1所示:

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire

图1:错误的内存释放方法的检测示例

3.2 修复代码

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire

在上述修复代码中,Samate 给出的修复方式为:在第31行通过 new[] 创建对象数组,并在第33行使用 delete[]

2. Les méfaits des méthodes de libération de mémoire incorrectes

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoireUne libération de mémoire incorrecte peut provoquer un comportement erroné inattendu du programme, voire provoquer le programme s'écraser. L'article 5 de "Effective C++ (Second Edition)" "Les new et delete correspondants doivent adopter la même forme" souligne : "Si les éléments de l'objet sont libérés de manière incorrecte, cela peut entraîner la destruction de l'objet entier ou même de la structure mémoire entière. le tas doit être endommagé. La corruption peut entraîner des fuites de mémoire ou même des plantages de programmes.

Il existe également des informations de vulnérabilité liées à cela dans la base de données CVE. De janvier 2018 à avril 2019, il y avait un total de 3 informations de vulnérabilité associées dans la base de données CVE. Les informations sur la vulnérabilité sont les suivantes :

CVE Présentation de la vulnérabilité
CVE-2018-14948 Le fichier wav-file.cc dans Dilawar Sound2017-11-27 et versions précédentes Il existe une vulnérabilité de méthode de libération de mémoire incorrecte (new[]/delete).
CVE-2018-14947 La fonction 'XmlFontAccu::CSStyle' du fichier XmlFonts.cc dans PDF2JSON version 0.69 présente une vulnérabilité de libération de mémoire incorrecte ( nouveau[]/supprimer).
CVE-2018-14946 Le fichier ImgOutputDev.cc dans PDF2JSON version 0.69 présente une vulnérabilité de méthode de mémoire incorrecte (malloc/delete) dans la classe HtmlString .

3. Exemple de code

L'échantillon provient de Samate Juliet Test Suite for C. / C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php), nom du fichier source : CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp.

3.1 Code défaut

[Defects Weekly] Issue 31 : Wrong Memory Release

Dans l'exemple de code ci-dessus, la ligne 31 utilise new[] crée un tableau d'objets et le libère en utilisant delete à la ligne 34. Lors de la libération du tableau d'objets, la classe new[] correspondant delete[] n'est pas utilisé, il existe donc "Mémoire incorrecte problème de méthode de libération". #🎜🎜##🎜🎜#Utilisez Code Guard pour détecter l'exemple de code ci-dessus, et vous pouvez détecter le défaut de "mauvaise méthode de libération de mémoire", et le niveau d'affichage est moyen. Comme le montre la figure 1 : #🎜🎜##🎜🎜#【Discussion hebdomadaire sur les défauts #🎜🎜##🎜🎜##🎜🎜#Figure 1 : Exemple de détection d'une mauvaise méthode de libération de mémoire#🎜🎜#

#🎜🎜#3.2 Code de réparation# 🎜🎜 #

#🎜🎜#[Défauts hebdomadaires] Problème du chapitre 31 : faux libération de mémoire#🎜🎜##🎜🎜#Dans le code de réparation ci-dessus, la méthode de réparation donnée par Samate est : passer à la ligne 31 new[] code> crée un tableau d'objets et le libère en utilisant <code class="prettyprint code-in-text Prettyprinted">delete[] à la ligne 33. Cela évite les méthodes incorrectes de libération de mémoire. #🎜🎜##🎜🎜#Utilisez Code Guard pour détecter le code réparé, et vous pourrez voir que le défaut "mauvaise méthode de libération de mémoire" n'existe plus. Comme le montre la figure 2 : #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜# Figure 2 : Résultats de détection après réparation#🎜🎜##🎜🎜##🎜🎜#4 . Comment éviter les mauvaises méthodes de libération de mémoire #🎜🎜##🎜🎜##🎜🎜# Pour éviter les mauvaises méthodes de libération de mémoire, vous devez faire attention aux points suivants : #🎜🎜##🎜🎜# (1) Lors de la libération mémoire, soyez clair La méthode utilisée pour l'application de la mémoire évite d'utiliser la mauvaise méthode de libération en raison de la structure complexe du programme et de la négligence du personnel. #🎜🎜##🎜🎜# (2) L'utilisation d'outils d'analyse statique du code source permet de détecter efficacement ce type de problème. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

[Defect Weekly] Numéro 31 : Mauvaise libération de mémoire [Defect Weekly] Numéro 31 : Mauvaise libération de mémoire May 23, 2023 pm 11:07 PM

1. Mauvaise méthode de libération de mémoire. Les fonctions courantes d'application de mémoire en langage C incluent malloc(), realloc() et calloc(). Bien qu'elles aient des fonctions différentes, elles correspondent toutes à la même fonction de libération de mémoire free(). la mémoire dans l'application et la version C++ adoptent les méthodes new/delete, new[]/delete[]. Qu'il s'agisse du langage C ou du langage C++, lors de l'écriture du code source, vous devez choisir la méthode de libération de mémoire en fonction des différentes méthodes d'application de la mémoire pour éviter d'utiliser la mauvaise version de mémoire. Par exemple : utilisation mixte de l'allocation/libération de mémoire C/C++, ou utilisation mixte de l'allocation/libération de mémoire scalaire et vectorielle. 2. Les dommages causés par une mauvaise méthode de libération de mémoire.

Techniques d'audit de code PHP recommandées et outils pratiques Techniques d'audit de code PHP recommandées et outils pratiques Aug 08, 2023 pm 02:15 PM

Aperçu des techniques d'audit de code PHP recommandées et des outils pratiques : Avec le développement rapide d'Internet, les problèmes de sécurité des sites Web sont devenus de plus en plus importants. En tant que langage largement utilisé dans le développement Internet, l'audit de sécurité du code PHP est devenu un maillon très important. Cet article présentera quelques techniques de base pour l'audit du code PHP et recommandera plusieurs outils pratiques. 1. La technologie d'audit de code analyse les fonctions sensibles. Dans l'audit de code PHP, la première chose à laquelle il faut prêter attention est l'utilisation des fonctions sensibles. Par exemple, la fonction eval() peut exécuter n'importe quel code transmis, donc

Comment faire un audit de code de base avec PHP Comment faire un audit de code de base avec PHP Jun 22, 2023 pm 02:06 PM

Avec l’amélioration de la sensibilisation à la sécurité des réseaux et l’amélioration continue des méthodes d’attaque des pirates informatiques, les problèmes de sécurité des sites Web sont devenus un problème incontournable pour les entreprises et les particuliers. À une époque où le problème est particulièrement grave, PHP est un langage de développement Web populaire, et de plus en plus d'entreprises ou de particuliers développent leurs sites Web via PHP. Afin d’assurer la sécurité des sites PHP, l’audit de code est un maillon indispensable. Qu’est-ce que l’audit de code ? L'audit de code est le processus d'analyse du code d'un site Web pour détecter les vulnérabilités de sécurité. Il s’agit d’une étude systématique et approfondie

Comment utiliser Python pour l'audit du code logiciel Comment utiliser Python pour l'audit du code logiciel Jun 29, 2023 am 10:13 AM

Comment utiliser Python pour l'audit du code logiciel Avec le développement rapide des applications logicielles, les problèmes de qualité du code et de sécurité font également l'objet d'une attention croissante. L'audit de code est un processus d'évaluation et de vérification de la qualité de votre code et de découverte des vulnérabilités et des problèmes de sécurité potentiels. En tant que langage de programmation flexible et riche en fonctionnalités, Python est largement utilisé dans la pratique de l'audit de code. Cet article présentera brièvement comment utiliser Python pour l'audit du code logiciel. 1. Comprendre les concepts de base de l'audit de code Avant de procéder à un audit de code, nous devons d'abord comprendre la signification de l'audit de code.

Comment gérer l'audit de code et la correction de bugs dans le développement PHP Comment gérer l'audit de code et la correction de bugs dans le développement PHP Oct 10, 2023 am 09:41 AM

Comment gérer l'audit de code et la réparation des vulnérabilités dans le développement PHP Avec le développement rapide d'Internet, PHP, en tant que langage de programmation largement utilisé, occupe une position importante dans le développement de sites Web et d'applications. Cependant, en raison de sa nature open source, le code PHP peut également être facilement exploité par des pirates informatiques, entraînant des failles de sécurité. Pour les développeurs PHP, l’audit du code et la réparation des vulnérabilités sont des problèmes auxquels il faut prêter attention. Cet article détaillera comment gérer l'audit du code et la correction des vulnérabilités dans le développement PHP, avec des exemples de code spécifiques. 1. Audit de codeAudit de code

Comment assurer la protection de la sécurité dans le développement de fonctions back-end PHP ? Comment assurer la protection de la sécurité dans le développement de fonctions back-end PHP ? Aug 06, 2023 pm 09:30 PM

Comment assurer la protection de la sécurité dans le développement de fonctions back-end PHP ? Avec la popularisation d'Internet et le développement rapide des technologies associées, PHP, en tant que langage de développement back-end largement adopté, compte de plus en plus d'utilisateurs. Cependant, les problèmes de sécurité qui en résultent ne peuvent être ignorés. Afin de protéger les données des utilisateurs et de prévenir les attaques malveillantes, les développeurs doivent prêter attention à la sécurité du développement des fonctions back-end PHP. Cet article présentera certaines mesures de protection de sécurité courantes dans le développement de fonctions back-end PHP et donnera des exemples de code correspondants. Validation des entrées et filtrage des données lors de la réception et du traitement des utilisateurs

Analyse de la technologie d'audit du code de sécurité PHP Analyse de la technologie d'audit du code de sécurité PHP Jun 30, 2023 pm 10:25 PM

PHP est un langage de script côté serveur largement utilisé dans le développement Web et la création de sites Web dynamiques. Cependant, avec le développement rapide d’Internet et l’augmentation des menaces à la sécurité des réseaux, les questions de sécurité sont progressivement devenues de plus en plus importantes pour les développeurs. Dans le développement PHP, la technologie d’audit du code de sécurité joue un rôle essentiel. Cet article explorera en profondeur l'analyse de la technologie d'audit du code de sécurité en PHP pour aider les développeurs à mieux protéger leurs applications. Tout d’abord, nous devons comprendre ce qu’est l’audit des codes de sécurité. L'audit du code de sécurité fait référence à un examen complet du code

Audit de code en PHP Audit de code en PHP May 24, 2023 am 08:04 AM

Avec le développement continu de la technologie des réseaux, diverses applications sont progressivement devenues un élément indispensable de la vie. En tant que langage de programmation largement utilisé dans le développement Web, PHP joue également un rôle important dans de nombreuses applications. Cependant, la sécurité du code PHP est souvent négligée et ignorée. Pour les pirates et les attaquants, les applications PHP deviennent des cibles d'attaques, et comment se prémunir contre et prévenir les attaques nécessite un audit du code PHP. Qu’est-ce que l’audit de code PHP ? L'audit du code PHP fait référence à la vérification du code PHP,

See all articles