Zeiger unsicher?
-
Hallo,
ich habe eben einen Artikel auf wikipedia über C# gelesen, in welchem mir ein Absatz aufgefallen ist:
Einige der Elemente von C++, die im Allgemeinen als unsicher gelten, wie beispielsweise Zeiger, werden in C# nur für sogenannten „unsicheren Code“ erlaubt, der in Zonen mit eingeschränkten Rechten (z. B. bei Programmen, die aus Webseiten heraus ausgeführt werden) ohne die Zuteilung erweiterter Rechte nicht ausgeführt wird.
Jetzt frage ich mich, warum Zeiger unsicher sind/sein sollen?
Gruß
nki
-
Grundsätzlich ist der Umgang mit Zeigern immer gefährlich, da man direkt auf die Speicheradressen von Daten zugreifen kann. Man muss sich ständig vergewissern, dass man alles richtig macht, weil es sonst zu Zugriffsverletzungen und undefiniertem Verhalten kommen kann. Die manuelle Speicherverwaltung mit
newunddeleteist ein gutes Beispiel dafür. Vor allem in komplexeren Programmstrukturen, z.B. Klassen mit Zeigern als Member, oder Container, in denen auch Iteratoren (eigentlich Zeiger mit spezieller Funktion) vorkommen, muss die Speicherverwaltung sorgfältig gehandhabt werden. Smart-Pointer erleichtern einem da die Handhabung, ich würde sie aber nicht als Zeiger an sich bezeichnen - sie sind auch nicht die immer die Lösung.Ich kenne zwar C# nicht und weiss folglich nicht, ob es dort besser gelöst ist mit den Zeigern.
-
Hi Nexus,
alles klar, danke für deine Erklärung.
Dass Zeiger bezüglich Zugriffsverletzungen etc. unsicher sind, ist mir bekannt. Also ist dies mit unsicher gemeint? Ich dachte jetzt eher an Sachen bezüglich der Security. Können dadurch riskante Sicherheitslücken entstehen und wenn ja, welche?
Gruß
nki
-
nki schrieb:
Hi Nexus,
alles klar, danke für deine Erklärung.
Dass Zeiger bezüglich Zugriffsverletzungen etc. unsicher sind, ist mir bekannt. Also ist dies mit unsicher gemeint? Ich dachte jetzt eher an Sachen bezüglich der Security. Können dadurch riskante Sicherheitslücken entstehen und wenn ja, welche?
Gruß
nki
So direkt hat das weniger was mit Security zu tun. Lücken können entstehen, aber das sind dann meist Löcher im Speicher.

-
Alles klar,
danke euch beiden

-
nki schrieb:
...Ich dachte jetzt eher an Sachen bezüglich der Security. Können dadurch riskante Sicherheitslücken entstehen und wenn ja, welche?...
Diese Ansicht ist weitverbreitet und gleichzeitig richtig UND falsch.
Es wird pauschal gesagt "Zeiger sind unsicher" (eines der wichtigsten Marketingargumente von Java) - aber gemeint ist in 99,99% der Fälle: "Zeichenketten-Behandlung mittels char* und ungeprüften str-/printf()-Funktionen ist unsicher".
Letzterem kann ich nur zustimmen und das schließt auch "Security" mit ein, weil man Fehlverhalten (das ursprünglich als "Safety-Risiko" eingestuft wurde) bewusst provozieren oder ausnutzen kann. Das ist mir allerdings ein zu weites Feld, um es hier "mal eben" abzuhandeln - Du kannst ja mal unter "secure programming" und da unter "buffer overflow" ein wenig rumsurfen.
Das geht sehr weit bis hin zum Unterjubeln eigener Codesequenzen in fremde Programme durch "geschickte" Eingaben...Gruß,
Simon2.
-
Heyho,
Bufferoverflows? Ahja, alles klar, in die Richtung hab ich auch schon gedacht

Dann habt ihr meine Frage im Großen und Ganzen beantwortet.
Nochmals vielen Dank.