[Defect Weekly] Problem 31: Falsche Speicherfreigabe
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缺陷代码
在上述示例代码中,第31行使用 new[]
创建对象数组,在第34行使用 delete
进行释放,由于在释放对象数组时,没有使用 new[]
对应的 delete[]
,因此存在“错误的内存释放方法”问题。
使用代码卫士对上述示例代码进行检测,可以检出“错误的内存释放方法”缺陷,显示等级为中。如图1所示:
图1:错误的内存释放方法的检测示例
3.2 修复代码
在上述修复代码中,Samate 给出的修复方式为:在第31行通过 new[]
创建对象数组,并在第33行使用 delete[]
2. Der Schaden falscher Speicherfreigabemethoden
Eine 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.
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

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](https://img.php.cn/upload/article/000/887/227/168485445778735.jpg)
🎜3.2 Reparaturcode🎜
🎜![[Defects Weekly] Problem 31: Falsche Speicherfreigabe](https://img.php.cn/upload%20/article/%20000/887/227/168485445736601.jpg)
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen


![[Defect Weekly] Problem 31: Falsche Speicherfreigabe](https://img.php.cn/upload/article/000/887/227/168485445614044.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
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.

Ü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

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 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-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? 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

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

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,
