Das Problem mit der Sicherheit hat auf den letzten MS Dev-Days einer der Vortragenden ganz gut auf den Punkt gebracht:
"Die Leute, die wir schützen wollen, sehen so aus
"
Das ganze ist wahrer als man denkt. Jeder Anwender weiß nach ein paar Tagen:
Wenn sich ein Programm meldet und sagt "Hey, wenn du XY zulässt kann es dich gefährten", wird nichts funktionieren. Z.B. eine Seite die auf ActiveX Controls aufsetzt. Also wird in Zukunft "jaja mach schon und nerv mich nicht" geklickt, damits funktioniert. Damit wäre in diesem Beispiel der zweifelhafte Schutz vor bösen ActiveX Seiten im IE gegessen.
Man könnte diese ganzen Abfragen eingentlich auf Ja / Nein / Nerv nicht herunterbrechen. Die meißten User werden "Nerv nicht" klicken. Da bringt es auch nichts, wenn die Abfragen opulenter und nerviger werden (Microsofts aktueller Kurs in der Sache). Da werden die User nur genervter und schalten das Hirn noch schneller ab.
Bleibt aber die Frage, was soll man tun? Eine Patentlösung für das Problem gibt es leider nicht. Sicher ist weiterhin derjenige, der etwas Grundwissen in Sachen PC / Betriebssystem / Internet hat und erst denkt und dann klickt.
Der sich selbst ein Bild macht, welchen Seiten kann ich trauen, welchen nicht. Sich fragt "warum will dieses Programm jetzt Adminrechte haben", "warum tut Programm X jetzt dies und das".
Im Endeffekt muss Sicherheit von den Developern umgesetzt und so weit wie möglich durchgesetzt ist. So dass der User einerseits beschützt, aber anderseits nicht eingeschränkt wird.
Generell sind die ActiveX Controls z.B. eine gute Idee. Allerdings wurde sie nicht zuende gedacht, wodurch diese Technologie ihren schlechten Ruf verdient hat. Dementsprechend wird es heutzutage anders gemacht und solche Anwendungen laufen in einer Sandbox, aus der sie nicht ausbrechen können.
Weiterhin werden Fehler/Verwundbarkeiten durch Buffer Overflows wirksam eingedämmt, indem Frameworks verwendet werden, die sich um das Speichermanagement kümmern (unter anderem).
Managed Code hat dazu noch den Vorteil, dass viele Sachen zur Laufzeit geändert werden können. Sicherheitseinschränkungen lassen sich bis auf einzelne Funktionen herunterbrechen.
Im .net Framework können Programme oder Programmteile auch bestimmte Rechte ganz ablehnen. Wenn z.B. ein Programmteil sagt "ich brauche keinen Schreibzugriff" wird jeder Schreibzugriff (der z.B. durch eine Manipulation stattfindet ) schlicht ignoriert.
Leider dauert es bei dieser Art der Sicherheit lange Zeit, bis das in den Köpfen der Entwickler anekommen ist. Viele Entwickler werden sich leider nie für das Thema interessieren.