Aktuelle Zeit: 15.11.2018 12:47

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 15:40 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Und noch eine Frage.

Code:
Structure s_mystructure
  id.i
  text.s
  value.i
EndStructure

*Mem.s_mystructure = AllocateStructure(s_mystructure)

*Mem\id = 1
*Mem\value = 2831
*Mem\text = "Hallo"

FreeStructure(*Mem)


Was passiert mit dem String in der Struktur ? Meines Wissens wird ja eigentlich nur ein Zeiger auf diesen String in der "Struktur" abgelegt.
Würde also heissen, er würde noch irgendwo im RAM des Computers herumfliegen. Sehe ich das richtig ?

Und wenn dem so ist, wie kriegt man den dann weg ? Weil ich stell mir das gerade wie eine Sicherheitslücke vor, wenn die Strings noch im
Speicher sind (Monitoring) ....

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 16:34 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Bei FreeStructure() gibt es einen Verweis auf ClearStructure()

Help hat geschrieben:
ClearStructure gibt den Speicher eines strukturierten Speicherbereichs frei. Dies ist nützlich, wenn die Struktur Strings, Arrays, Listen oder Maps beinhaltet, welche intern von PureBasic allokiert wurden. 'Struktur' ist der Name der Struktur, welche zum Ausführen des Löschens verwendet werden soll. Alle Felder werden auf Null gesetzt. Es gibt keine interne Überprüfung, um sicherzustellen, dass die Struktur zum Speicherbereich passt. Diese Funktion ist nur für fortgeschrittene Anwender und sollte mit Bedacht verwendet werden.


Wenn du den String wirklich aus dem Speicher haben willst, dann müsstest du den Speicherbereich vorher mit Blanks überschreiben.


Zuletzt geändert von Josh am 10.09.2017 16:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 16:35 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Das hab ich glatt überlesen. Danke.

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 16:38 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Wird nicht überschrieben, aber freigegeben...

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 17:30 
Offline

Registriert: 29.08.2004 13:18
Der String wird freigeben. Problem ist allerdings, nicht überschrieben und ein Pointer auf diesen String bleibt gültig. Anfangs erhält man sogar noch den String, bis irgendwann das System den Speicher wieder verwendet und irgendwas drin landet. Und dann wirds kritisch.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 19:08 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
Das war meine Befürchtung.

Also sollte man vor dem Freigeben den String mit der gleichen Länge mit irgendwas befüllen.

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 19:41 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
Das Problem hast doch nicht nur in Strukturen, das hast du bei jedem einzelnen String. Wenn es so wichtige Daten sind, dann halt immer mit Leerzeichen drüber schreiben.

Bisonte hat geschrieben:
Also sollte man vor dem Freigeben den String mit der gleichen Länge mit irgendwas befüllen.
Den String mit gleicher Länge zu befüllen ist unsicher, soweit ich weiß, allociert Pb bei jeder Änderung eines Strings einen neuen Speicher. Mit PokeS() ist das auf jeden Fall sicherer.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 20:08 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
In Deiner Structure ist es doch ein ganz normaler String.
Wenn du die Structure frei gibst, darf du auch nicht mehr darauf zugreifen. Ist doch normal.
Warum solltest du auf den String als Pointer zugreifen?

Mit FreeStructure wird auch der String in der Structure freigeben. Somit kommt es auch nicht zu einen Speicherleck.
Also alles Gut.

Oder hast du Angst das jemand im Arbeitsspeicher Dein Programm hackt :mrgreen:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 10.09.2017 23:38 
Offline
Benutzeravatar

Registriert: 01.04.2007 20:18
mk-soft hat geschrieben:
In Deiner Structure ist es doch ein ganz normaler String.
Wenn du die Structure frei gibst, darf du auch nicht mehr darauf zugreifen. Ist doch normal.
Warum solltest du auf den String als Pointer zugreifen?

Mit FreeStructure wird auch der String in der Structure freigeben. Somit kommt es auch nicht zu einen Speicherleck.
Also alles Gut.

Oder hast du Angst das jemand im Arbeitsspeicher Dein Programm hackt :mrgreen:


Nein, das nicht. Es geht mir eigentlich darum, dass WENN sensible Daten in einem String stecken, das man diese dann auch aus dem Speicher
wirklich entfernt, oder halt unlesbar macht. Das kein Speicherleck entsteht ist mir klar.

Z.b. nimm ein Datenbank Programm. Du hast ein verschlüsseltes Passwort. Dieses musst du entschlüsseln, damit du auf die Datenbank zugreifen kannst. Nach dem "Login" Vorgang würde aber bei einem "nichtfreigeben" das unverschlüsselte Passwort noch im Speicher stehen.

Und daher wollt ich nun wissen, ob bei FreeStructure() oder auch FreeMemory() mit einem String passiert.

Fazit : Der String ist noch unverändert im Speicher. Ergo : Unlesbar machen wenn sensible Daten. (natürlich VOR dem freigeben ;) )

Im Grunde das gleiche Prinzip wie bei Festplatten. Das File ist solange "rettbar", solange es nicht überschrieben wurde.

_________________
PureBasic 5.46 LTS / 5.62 (Windows x86/x64) | Windows10 Pro x64 | Z370 Extreme4 | i7 8770k | 32GB RAM | iChill GeForce GTX 980 X4 Ultra | HAF XF Evo​​


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Was passiert mit Strings bei FreeStructure() ?
BeitragVerfasst: 11.09.2017 17:56 
Offline

Registriert: 29.08.2004 13:18
Bisonte hat geschrieben:
Nein, das nicht. Es geht mir eigentlich darum, dass WENN sensible Daten in einem String stecken, das man diese dann auch aus dem Speicher
wirklich entfernt, oder halt unlesbar macht.


dann liest man es aus, wenn das Programm das noch nutzt...

Ich denke darüber brauchst du nicht so große Gedanken machen. Wenn der Rechner verseucht ist, dann wird eh alles ausgehebelt. Und das entschlüsselte Passwort - es müsste von einen anderen Programm gezielt angefordert werden (was nicht geht) und dann ausgewertet. Es müsste immer wieder Speicher anfordern und zwar eigentlich alles etc. durchsuchen und freigeben und so weiter. Das würde auffallen.

Aber wenn du sicher gehen willst, ruf ein "ClearStructure" vorher auf. Dann ists weg.

_________________
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  
cron

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye