On Sun, Jan 13, 2002 at 05:48:32PM +0100, Konrad Rosenbaum wrote:
sscanf(argv[x],"%d",&b);
[sf]scanf ist bbbb�se (wegen Ellipse, nicht typsicher ) und sollte nicht verwendet werden, wenn es Alternativen gibt (siehe andere Antworten).
Angriffe auf scanf nutzen normalerweise dynamische Formatstrings oder Stringargumente, die zu kurz geraten sind.
Ach Konrad, k�mpfst Du mal wieder gegen Windm�hlen? Wo schrieb ich was zu "Angriffen"? Wei�t Du was "typsicher" bedeutet? Es ging mir nur darum, da� Funktionen wie, strtof(3) besser darauf achten, was Ihnen da so �bergeben wird, da alle Argumente typisiert sind, was man von einer Ellipse nicht gerade sagen kann. Wenn Du scanf einen Schei�string �bergibst bekommst Du Schei�e zur�ck (Sorry), w�hrend strtof Bescheid sagt, wenn was im Argen ist.
Was Du genau dem scanf da �bergibst, hab ich mir gar nicht angesehen und h�tte auch das Manual zu Rate ziehen m�ssen, da ich NIE scanf benutze, aus genannten Gr�nden. Deshalb ist
Dir als grossem C- und Security-Experten haette etwas anderes auffallen muessen: ich habe das falsche %-Statement benutzt, es haette %lf sein muessen.
auch hinf�llig.
Solange man bestimmte Regeln beachtet sind auch Ellipsen, Pointer-Arithmetik, Puffer und einige andere potentielle Sicherheitsluecken ungefaehrlich. C bringt es nun einmal mit sich, dass Du aufpassen musst, was Du tust.
Kein Einwand, ich sprach gar nicht �ber Sicherheit (Buffer-Overflow & Co.)
Wenn Du eine sicherere Umgebung haben willst, in der Du kaum Fehler machen kannst, dann nimm Skriptsprachen. Es gibt einige dutzend davon, such Dir eine aus.
Nun ja, da hab ich vielleicht kein BOs, aber daf�r kann ich mir die Typen bei den meisten Skiptsprachen gleich in die Haare schmieren... Kompromiss? -> Ada? (�h, ich meine JEHOVA)
Uebrigens: char buf[1024]; 1: snprintf(buf,1023,"%s\n",somestring) 2: cin>>buf;
welches der beiden Statements ist Deiner Meinung nach fuer einen Angriff gefaehrdet? Nr. 1 mit der ach so boesen Ellipse oder 2 mit dem voellig harmlosen >>-Operator?
Definier "Gef�hrdung". BOs: (1) unproblematisch [ohne weiter dr�ber nachzudenken], (2) keine Ahnung sonst: (1) int somestring=SOMENUMBER; (2) k.A.
Die Antworten zu (2) resultieren aus dem Unverst�ndnis f�r die Notwendigkeit der objektorientierten Darstellung von I/O durch Streamklassen und dem daraus entstanden Ignorieren dergleichen.
Das naechste Mal bitte nachdenken, bevor Du schreist.
Wer schreit denn?
Gru�, Eric