Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Privat nicht wirklich vertraulich?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.10.2008, 13:19    Titel: Privat nicht wirklich vertraulich? Antworten mit Zitat

Code:

type _tresor
    public:
    oeffentlich as string
    Declare Constructor ()
    private:
    darfkeinersehen as string
   
end type
Constructor _tresor()
    oeffentlich = "Der Chef ist Klasse!"
    darfkeinersehen = "Ich mag meinen Chef nicht!"
end constructor

type _einbruch
    oeffentlich as string
    versteckt as string
end type

dim tresor1 as _tresor
dim einbruch as _einbruch ptr
print tresor1.oeffentlich
einbruch = cast(any ptr, @tresor1)
print einbruch->versteckt
sleep


irgendwie hab ich mir verhofft nicht an mein privates "darfkeinersehen" herranzukommen :-/
obwohl ich noch nicht genau weiss obs in C++ nicht auch so funktioniert...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.10.2008, 14:17    Titel: Antworten mit Zitat

Sollte eigentlich in C++ nicht gehen, daß Du den Zeiger ja auf "Any" umcastest. Das gibt es in C++ nicht. Nachdem "darfkeinersehen" an der gleichen Stelle im Type liegt wie "versteckt", hat es den gleichen Index, und so kannst Du eben darauf zugreifen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.10.2008, 15:22    Titel: Antworten mit Zitat

Das die Anordnung der Indexe der Variablen anscheinend die selben ist mir klar, aber darf das so sein? .. private-inhalte müssen ja nicht direkt verschlüsselt im arbeitsspeicher abgelegt werden, aber irgendwie hab ich mir ein quäntchen mehr "privatsphäre" gewünscht wenn ich bestimmte variablen als privat deklarieren...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 30.10.2008, 15:25    Titel: Antworten mit Zitat

PS: Benutze ich kein CAST dann entsteht lediglich "Suspicious pointer assignment" beim kompilieren, was aber dem programm-ablauf auch nicht schadet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 30.10.2008, 16:34    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:
Das die Anordnung der Indexe der Variablen anscheinend die selben ist mir klar, aber darf das so sein? .. private-inhalte müssen ja nicht direkt verschlüsselt im arbeitsspeicher abgelegt werden, aber irgendwie hab ich mir ein quäntchen mehr "privatsphäre" gewünscht wenn ich bestimmte variablen als privat deklarieren...


Naja, nobody and no programming language is perfect happy .
Das private ist nur eine Anweisung an den Compiler, die Zugriffsrechte zu überprüfen. Im Maschinencode gibt es keine Unterscheidung zwischen private und public mehr.
Wenn Du einen Pointer setzt, fragt der Rechner auch nicht, ob das Zielobjekt Privat ist, sondern fragt nur stur die Adresse ab. Durch das Casten auf den Typ "Einbrecher", der keinen privaten Bereich enthält, hast du die privatsphäre aufgehoben. Das ist die Gefahr bei Typecasting und Any-Pointern.
Du kannst statt des Typecasts auf any auf einen Tresor-Pointer casten, dann bleibt der Privatbereich wahrscheinlich erhalten (vermute ich, habs jetzt nicht probiert).

Das "suspicious pointer assignment" ist nur eine Warnmeldung, weil der Pointer zur Laufzeit einen unzulässigen Wert annehmen könnte.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.10.2008, 13:13    Titel: Antworten mit Zitat

Ich glaube ihr betrachtet dies aus einer falschen Sicht geschockt
Was du als "einbruch" bezeichnest ist doch eine Kopie des Type _tresor, also ein 'Schlüssel'.
Also nur mit dem richtigen Nachschlüssel komm ich auch an den Inhalt des Tresors, sonst:
Code:
TYPE _tresor
    PUBLIC:
    oeffentlich AS String = "Der Chef ist Klasse!"
    darfjedersehen AS String ="Ich mag meinen Chef!"
    PRIVATE:
    meingehalt As Double = 1234.56
    darfkeinersehen AS String = "Ich mag meinen Chef nicht!"   
END TYPE

TYPE _nachschluessel
    oeffentlich AS STRING
    versteckt AS STRING
END TYPE

DIM tresor1 AS _tresor
DIM nachschluessel AS _nachschluessel PTR
PRINT tresor1.oeffentlich
nachschluessel = CAST(Any PTR, @tresor1)
PRINT nachschluessel->versteckt
SLEEP

_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 31.10.2008, 13:50    Titel: Antworten mit Zitat

Ich wollte eher in hinblick auf den sicherheitsaspekt fragen ob das wirklich richtig implementiert ist, das private und public variablen innerhalb einer udt genauso in ihrer reihenfolge im speicher angeordnet bleiben als ob es keinen unterschied zwischen private und public gäbe.

Klar, wenn man die type nicht kennt, kann man auch nicht auf dessen private daten zugreifen.
Aber sobald man den aufbau kennt, kann man auf evtl. vertrauliche daten zugreifen... wie gesagt, ich rede nicht davon das sie verschlüsselt sein sollten, das wäre zuviel verlangt. Aber vom aspekt der vetraulichkeit von "privaten" daten, wäre es nicht eher sinnvoll private daten im speicher an einer logisch nicht nachzuvollziehende stelle im speicher abzulegen?

Will natürlich auch nicht die allwissenheit und allmächtigkeit der compiler entwickler angreifen! deswegen ist das jetzt erstmal "nur" eine frage...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 31.10.2008, 14:01    Titel: Antworten mit Zitat

OneCypher hat Folgendes geschrieben:

Aber sobald man den aufbau kennt, kann man auf evtl. vertrauliche daten zugreifen... wie gesagt, ich rede nicht davon das sie verschlüsselt sein sollten, das wäre zuviel verlangt. Aber vom aspekt der vetraulichkeit von "privaten" daten, wäre es nicht eher sinnvoll private daten im speicher an einer logisch nicht nachzuvollziehende stelle im speicher abzulegen?

Theoretisch ja. Das würde aber bedeuten, daß der Compiler eine Funktion dazudichten muß, die die Speicherzuweisung für die privaten Daten übernimmt (macht normalerweise das Betriebssystem) und die Zugriffsfunktion entsprechend ergänzt. Der Programmieraufwand ist wohl unverhältnismäßig hoch.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 31.10.2008, 15:20    Titel: Antworten mit Zitat

Hmm.. wäre echt klasse wenn man es implementieren könnte das privat-deklarationen im speicher woanders angeordnet werden..
so muss ich es manuell machen:

Code:

type privatdaten
    daten as string
end type

TYPE _tresor
    PUBLIC:
    oeffentlich AS STRING
    DECLARE CONSTRUCTOR ()
    PRIVATE:
    darfkeinersehen AS privatdaten ptr
   
END TYPE
CONSTRUCTOR _tresor()
    oeffentlich = "Der Chef ist Klasse!"
    darfkeinersehen = new privatdaten
    darfkeinersehen->daten = "Ich mag meinen Chef nicht!"
END CONSTRUCTOR

TYPE _einbruch
    oeffentlich AS STRING
    versteckt AS STRING
END TYPE

DIM tresor1 AS _tresor
DIM einbruch AS _einbruch PTR
PRINT tresor1.oeffentlich
einbruch = CAST(ANY PTR, @tresor1)
PRINT einbruch->versteckt
SLEEP


Und kann mir einer mal sagen warum ich mit new keinen string im speicher erzeugen kann?
" The NEW operator cannot be used with strings in 'darfkeinersehen = new string' "
Warum muss ich um einen String im speicher neu anzulegen eine type dafür bemühen??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 31.10.2008, 15:34    Titel: Antworten mit Zitat

Hmm..
ich denke 'Private' ist hier nur gedacht direkte Zugriffe, a la "tresor1.darfkeinersehen" zu verhindern.
Das sind keine "vertraulichen" Daten und auch ein auslagern der Daten, aus der Type Reihenfolge in andere Bereiche, erfordert dann einen Pointer darauf, der auch wieder die Daten zugänglich macht mit den Augen rollen .
Ich sehe da keinen Unterschied zu anderen Programmiersprachen, es gibt bestimmt immer einen Weg an diese Daten zu gelangen.

lachen lachen lachen
Code:
TYPE privatdaten
    daten AS STRING
END TYPE

TYPE _tresor
    PUBLIC:
    oeffentlich AS STRING
    DECLARE CONSTRUCTOR ()
    PRIVATE:
    darfkeinersehen AS privatdaten PTR
   
END TYPE
CONSTRUCTOR _tresor()
    oeffentlich = "Der Chef ist Klasse!"
    darfkeinersehen = new privatdaten
    darfkeinersehen->daten = "Ich mag meinen Chef nicht!"
END CONSTRUCTOR

TYPE _einbruch
    oeffentlich AS STRING
    versteckt AS String ptr
END TYPE

DIM tresor1 AS _tresor
DIM einbruch AS _einbruch PTR
PRINT tresor1.oeffentlich
einbruch = CAST(ANY PTR, @tresor1)
PRINT *(einbruch->versteckt)
SLEEP
... nur eine Frage des Nachschlüssels. durchgeknallt
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 02.11.2008, 13:59    Titel: Antworten mit Zitat

Hi,

ich sehe es genauso wie volta.
"Private" hat nichts mit "Privatsphäre" etc. zu tun und ist auch nicht dafür geeignet, sensible Daten zu verschlüsseln.

"Private" dient ausschließlich dazu, zu verhindern, dass man den klasseninternen Funktionsablauf gefährdet. Diese Daten sind unsichtbar für andere Objekte, die nicht Teil der Klasse sind, damit diese die Daten nicht versehentlich ändern oder lesen, aber keinesfalls, um diese vor Crackern zu schützen.

So geht es zum Beispiel die Klasse PetOwner nichts an wie die Klasse Dog auf die Methode "eat" intern reagiert, aber wenn du den Hund durchleuchtest, siehst du es z.T. doch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Elektronix



Anmeldungsdatum: 29.06.2006
Beiträge: 742

BeitragVerfasst am: 02.11.2008, 17:13    Titel: Antworten mit Zitat

@Dominik
Richtig. Private und public sind Erfindungen der OOP. Die soll zwar in FB auch mal realisiert werden, aber so weit sind wir noch nicht.
OOP soll die Aktionen einzelner Objekte in der Realität nachempfinden. Die Deklaration "private" ermöglicht nur, da ein Objekt selbst entscheiden kann, welche seiner Daten wie und wann genutzt werden, und verhindert, daß fremde Objekte auf diese Daten sozusagen ohne Legitimation oder ohne Kontrolle zugreifen.
_________________
Und die Grundgebihr is aa scho drin- DOS is jo nett.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 27.11.2008, 13:36    Titel: Antworten mit Zitat

Äh warum so kompliziert wenn es auch einfach geht??
Code:
type strenggeheim
    private:
    dim geheime_botschaft as string = "HALLO :)"
end type

dim as strenggeheim oops

' ein kleiner exploit der das unmöliche möglich macht...
dim as string exploit(1)
print exploit(2)
sleep

_________________
Bis irgendwann... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 27.11.2008, 14:02    Titel: Antworten mit Zitat

Wieso "einfach" ?
Zeigt doch nur das man sogar aus "versehen", durch einen Programmiererfehler, an die Daten kommen kann! mit den Augen rollen

In einem größeren Prog, mit weiteren Strings, würde das so leicht nicht mehr funktionieren.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 27.11.2008, 15:18    Titel: Antworten mit Zitat

Zu dieser gesamten Diskussion: Private und Public sind typische Paradigmen aus der OO-Grundphilosophie und stellen die Grundlage für Information Hiding bzw. präsizer Dateneinkapselung dar. Als Benützer einer Klasse muss ich die Internas nicht zu kennen. Die Unterstützung von "private" beim Compiler garantiert mir, nicht versehentlich auf interne Ressourcen direkt zuzugreifen und gibt mir als Programmierer die Gewähr, Änderungen an der Klasse vornehmen zu können, ohne dass die Linker/Schnittstellen-Kompatibilität verloren geht.

Dateneinkapselung hat übrigens absolut nichts mit IT Security (Schutz von Informationen gegen unbefugtem Zugriff), wie ich es als Geschäftszweig meiner eigenen Firma praktiziere, zu tun!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz