Inhaltsverzeichnis
1. Falsche Speicherfreigabemethode
2、 错误的内存释放方法的危害
3、示例代码
3.1缺陷代码
3.2 修复代码
3.1 Fehlercode
🎜3.2 Reparaturcode🎜
Heim Betrieb und Instandhaltung Sicherheit [Defect Weekly] Problem 31: Falsche Speicherfreigabe

[Defect Weekly] Problem 31: Falsche Speicherfreigabe

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

1. Falsche Speicherfreigabemethode

Zu den allgemeinen Speicheranwendungsfunktionen in der C-Sprache gehören malloc(), realloc(), calloc(), obwohl sie unterschiedliche Funktionen haben, entsprechen sie alle derselben Speicherfreigabefunktion free(), Speicheranwendung und -freigabe in C++ übernehmen die Methoden new/delete, new []/delete[]. Unabhängig davon, ob es sich um eine C-Sprache oder eine C++-Sprache handelt, müssen Sie beim Schreiben von Quellcode die Speicherfreigabemethode entsprechend den verschiedenen Speicheranwendungsmethoden auswählen, um die Verwendung der falschen Speicherfreigabe zu vermeiden. Zum Beispiel: gemischte Verwendung der C/C++-Speicherzuweisung/-freigabe oder gemischte Verwendung der Skalar- und Vektorspeicherzuweisung/-freigabe. 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] Problem 31: Falsche Speicherfreigabe

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

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

[Defect Weekly] Problem 31: Falsche Speicherfreigabe

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

3.2 修复代码

[Defect Weekly] Problem 31: Falsche Speicherfreigabe

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

2. Der Schaden falscher Speicherfreigabemethoden

[Defect Weekly] Problem 31: Falsche SpeicherfreigabeEine falsche Speicherfreigabe kann zu unerwartetem fehlerhaftem Verhalten des Programms oder sogar zum Absturz des Programms führen. Punkt 5 von „Effective C++ (Second Edition)“ „Die entsprechenden Neu- und Löschvorgänge müssen dieselbe Form annehmen“ weist darauf hin: „Wenn die Elemente im Objekt falsch freigegeben werden, kann dies dazu führen, dass das gesamte Objekt oder sogar die gesamte Speicherstruktur beschädigt wird.“ Der Heap kann beschädigt werden, was zu Speicherverlusten oder sogar Programmabstürzen führt.

In der CVE-Datenbank gibt es auch diesbezügliche Schwachstelleninformationen. Von Januar 2018 bis April 2019 gab es in der CVE-Datenbank insgesamt drei verwandte Schwachstelleninformationen. Die Informationen zur Sicherheitslücke lauten wie folgt:

CVE Vulnerability Overview
CVE-2018-14948 In der Datei wav-file.cc in dilawar sound2017-11 liegt ein Fehler vor -27 und frühere Versionen: Sicherheitslücke bei der Speicherfreigabemethode (new[]/delete).
CVE-2018-14947 Die Funktion „XmlFontAccu::CSStyle“ der Datei XmlFonts.cc in PDF2JSON Version 0.69 weist eine Sicherheitslücke aufgrund falscher Speicherfreigabe auf ( neu[]/löschen).
CVE-2018-14946 Die Datei ImgOutputDev.cc in PDF2JSON Version 0.69 weist eine Sicherheitslücke bezüglich falscher Speichermethoden (malloc/delete) in der HtmlString-Klasse auf .

3. Beispielcode

Das Beispiel stammt aus der Samate Juliet Test Suite für C/C++ v1.3 (https://samate.nist.gov / SARD/testsuite.php), Name der Quelldatei: CWE762_Mismatched_Memory_Management_Routines__new_array_delete_char_01.cpp.

3.1 Fehlercode

【Defect Weekly Talk „ 】Problem 31: Falsche Speicherfreigabe“ /><p></p>Im obigen Beispielcode verwendet Zeile 31 <code class=new[], um ein Objektarray zu erstellen Zeile 34 verwendet <code class="prettyprint code-in-text Prettyprinted">delete zum Freigeben, da beim Freigeben des Objektarrays new nicht verwendet wird . [] entspricht delete[], es liegt also ein Problem mit der „falschen Speicherfreigabemethode“ vor. 🎜🎜Verwenden Sie Code Guard, um den oben genannten Beispielcode zu erkennen. Sie können den Fehler „Falsche Speicherfreigabemethode“ erkennen und die Anzeigeebene ist mittel. Wie in Abbildung 1 gezeigt: 🎜🎜[Defects Weekly] Problem 31: Fehler „Speicher release🎜🎜🎜Abbildung 1: Erkennungsbeispiel einer falschen Speicherfreigabemethode🎜

🎜3.2 Reparaturcode🎜

🎜[Defects Weekly] Problem 31: Falsche Speicherfreigabe🎜🎜Im obigen Reparaturcode lautet die von Samate angegebene Reparaturmethode: Zeile 31 erstellt ein Objektarray durch new[] und verwendet delete[ in Zeile 33 ] zum Freigeben. Dies vermeidet falsche Speicherfreigabemethoden. 🎜🎜Verwenden Sie Code Guard, um den reparierten Code zu erkennen, und Sie können sehen, dass der Fehler „Falsche Speicherfreigabemethode“ nicht mehr besteht. Wie in Abbildung 2 dargestellt: 🎜🎜🎜🎜🎜🎜Abbildung 2: Erkennungsergebnisse nach der Reparatur🎜🎜🎜4. So vermeiden Sie falsche Speicherfreigabemethoden🎜🎜🎜Um falsche Speicherfreigabemethoden zu vermeiden, müssen Sie auf die folgenden Punkte achten :🎜🎜(1) Klären Sie beim Freigeben von Speicher die für die Speicheranwendung verwendete Methode, um zu vermeiden, dass aufgrund komplexer Programmstruktur und Nachlässigkeit des Personals die falsche Freigabemethode verwendet wird. 🎜🎜(2) Mithilfe statischer Quellcode-Analysetools kann diese Art von Problem effektiv erkannt werden. 🎜

Das obige ist der detaillierte Inhalt von[Defect Weekly] Problem 31: Falsche Speicherfreigabe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

[Defect Weekly] Problem 31: Falsche Speicherfreigabe [Defect Weekly] Problem 31: Falsche Speicherfreigabe May 23, 2023 pm 11:07 PM

1. Falsche Speicherfreigabemethode. Zu den allgemeinen Speicheranwendungsfunktionen in der C-Sprache gehören malloc(), realloc() und calloc(). Sie entsprechen alle der gleichen Speicherfreigabefunktion free() Speicher in C++-Anwendungen und -Releases übernehmen die Methoden new/delete, new[]/delete[]. Unabhängig davon, ob es sich um eine C-Sprache oder eine C++-Sprache handelt, müssen Sie beim Schreiben von Quellcode die Speicherfreigabemethode entsprechend den verschiedenen Speicheranwendungsmethoden auswählen, um die Verwendung der falschen Speicherfreigabe zu vermeiden. Zum Beispiel: gemischte Verwendung der C/C++-Speicherzuweisung/-freigabe oder gemischte Verwendung der Skalar- und Vektorspeicherzuweisung/-freigabe. 2. Der Schaden einer falschen Speicherfreigabemethode.

Empfohlene PHP-Code-Überprüfungstechniken und praktische Tools Empfohlene PHP-Code-Überprüfungstechniken und praktische Tools Aug 08, 2023 pm 02:15 PM

Überblick über empfohlene PHP-Code-Überprüfungstechniken und praktische Tools: Mit der rasanten Entwicklung des Internets sind Website-Sicherheitsprobleme immer wichtiger geworden. Als eine in der Internetentwicklung weit verbreitete Sprache ist die Code-Sicherheitsüberprüfung von PHP zu einem sehr wichtigen Bindeglied geworden. In diesem Artikel werden einige grundlegende Techniken für die Prüfung von PHP-Code vorgestellt und mehrere praktische Tools empfohlen. 1. Die Code-Audit-Technologie scannt sensible Funktionen. Bei der PHP-Code-Audit muss zunächst auf die Verwendung sensibler Funktionen geachtet werden. Beispielsweise kann die Funktion eval() jeden übergebenen Code ausführen

So führen Sie eine grundlegende Codeprüfung mit PHP durch So führen Sie eine grundlegende Codeprüfung mit PHP durch Jun 22, 2023 pm 02:06 PM

Mit der Verbesserung des Netzwerksicherheitsbewusstseins und der kontinuierlichen Verbesserung der Hackerangriffsmethoden sind Website-Sicherheitsprobleme für Unternehmen und Einzelpersonen zu einem unvermeidbaren Problem geworden. In dieser Zeit, in der das Problem besonders schwerwiegend ist, ist PHP eine beliebte Webentwicklungssprache und immer mehr Unternehmen oder Einzelpersonen entwickeln ihre Websites mit PHP. Um die Sicherheit von PHP-Websites zu gewährleisten, ist die Codeprüfung ein unverzichtbares Bindeglied. Was ist Code-Auditing? Beim Code-Auditing handelt es sich um den Prozess der Analyse des Website-Codes, um Sicherheitslücken zu finden. Dies ist eine systematische und ausführliche

So verwenden Sie Python für die Software-Code-Prüfung So verwenden Sie Python für die Software-Code-Prüfung Jun 29, 2023 am 10:13 AM

So verwenden Sie Python für die Software-Code-Prüfung Mit der rasanten Entwicklung von Softwareanwendungen haben auch Fragen der Codequalität und -sicherheit zunehmend an Bedeutung gewonnen. Beim Code-Auditing handelt es sich um einen Prozess zur Bewertung und Überprüfung der Codequalität sowie zur Entdeckung potenzieller Schwachstellen und Sicherheitsprobleme. Als flexible und funktionsreiche Programmiersprache wird Python häufig in der Praxis der Codeprüfung eingesetzt. In diesem Artikel wird kurz vorgestellt, wie Python für die Software-Code-Prüfung verwendet wird. 1. Verstehen Sie die Grundkonzepte der Codeprüfung. Bevor wir eine Codeprüfung durchführen, müssen wir zunächst die Bedeutung der Codeprüfung verstehen.

Umgang mit Code-Auditing und Fehlerbehebung in der PHP-Entwicklung Umgang mit Code-Auditing und Fehlerbehebung in der PHP-Entwicklung Oct 10, 2023 am 09:41 AM

Umgang mit Code-Audit und Schwachstellenbehebung bei der PHP-Entwicklung Mit der rasanten Entwicklung des Internets nimmt PHP als weit verbreitete Programmiersprache eine wichtige Stellung bei der Entwicklung von Websites und Anwendungen ein. Aufgrund seines Open-Source-Charakters kann PHP-Code jedoch auch leicht von Hackern ausgenutzt werden, was zu Sicherheitslücken führt. Für PHP-Entwickler sind Code-Audit und Schwachstellenbehebung Themen, auf die man achten muss. In diesem Artikel wird anhand spezifischer Codebeispiele detailliert beschrieben, wie Code-Audit und Schwachstellenbehebung in der PHP-Entwicklung durchgeführt werden. 1. Code-AuditCode-Audit

Wie kann der Sicherheitsschutz bei der Entwicklung von PHP-Back-End-Funktionen durchgeführt werden? Wie kann der Sicherheitsschutz bei der Entwicklung von PHP-Back-End-Funktionen durchgeführt werden? Aug 06, 2023 pm 09:30 PM

Wie kann der Sicherheitsschutz bei der Entwicklung von PHP-Back-End-Funktionen durchgeführt werden? Mit der Popularisierung des Internets und der rasanten Entwicklung verwandter Technologien hat PHP als weit verbreitete Back-End-Entwicklungssprache immer mehr Benutzer. Die daraus resultierenden Sicherheitsprobleme können jedoch nicht ignoriert werden. Um Benutzerdaten zu schützen und böswillige Angriffe zu verhindern, müssen Entwickler auf die Sicherheit der PHP-Back-End-Funktionsentwicklung achten. In diesem Artikel werden einige gängige Sicherheitsschutzmaßnahmen bei der Entwicklung von PHP-Back-End-Funktionen vorgestellt und entsprechende Codebeispiele gegeben. Eingabevalidierung und Datenfilterung beim Empfang und der Verarbeitung von Benutzern

Analyse der PHP-Sicherheitscode-Audit-Technologie Analyse der PHP-Sicherheitscode-Audit-Technologie Jun 30, 2023 pm 10:25 PM

PHP ist eine weit verbreitete serverseitige Skriptsprache, die häufig in der Webentwicklung und der dynamischen Website-Erstellung eingesetzt wird. Mit der rasanten Entwicklung des Internets und der Zunahme von Netzwerksicherheitsbedrohungen werden Sicherheitsfragen für Entwickler jedoch immer wichtiger. Bei der PHP-Entwicklung spielt die Technologie zur Überprüfung des Sicherheitscodes eine entscheidende Rolle. In diesem Artikel wird die Analyse der Sicherheitscode-Überwachungstechnologie in PHP eingehend untersucht, um Entwicklern dabei zu helfen, ihre Anwendungen besser zu schützen. Zuerst müssen wir verstehen, was Sicherheitscode-Überprüfung ist. Die Prüfung des Sicherheitscodes bezieht sich auf eine vollständige Überprüfung des Codes

Code-Auditing in PHP Code-Auditing in PHP May 24, 2023 am 08:04 AM

Mit der kontinuierlichen Weiterentwicklung der Netzwerktechnologie sind verschiedene Anwendungen nach und nach zu einem unverzichtbaren Bestandteil des Lebens geworden. Als in der Webentwicklung weit verbreitete Programmiersprache spielt PHP auch in vielen Anwendungen eine wichtige Rolle. Allerdings wird die Sicherheit von PHP-Code oft übersehen und ignoriert. Für Hacker und Angreifer werden PHP-Anwendungen zum Ziel von Angriffen, und wie man sich vor Angriffen schützen und sie verhindern kann, erfordert eine Prüfung des PHP-Codes. Was ist PHP-Code-Auditing? Unter PHP-Code-Auditing versteht man die Prüfung von PHP-Code,

See all articles