-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Sunday 13 January 2002 16:40, Eric Schaefer wrote:
On Sun, Jan 13, 2002 at 01:08:36PM +0100, Konrad Rosenbaum wrote:
On Sunday 13 January 2002 12:51, Steffen Liebergeld wrote:
double b; b = argv[x];
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).
Hallo Eric,
Angriffe auf scanf nutzen normalerweise dynamische Formatstrings oder Stringargumente, die zu kurz geraten sind.
Dir als grossem C- und Security-Experten haette etwas anderes auffallen muessen: ich habe das falsche %-Statement benutzt, es haette %lf sein muessen.
Solange man mit scanf keine Strings einliest (%s) und keine dynamischen Formatstrings benutzt oder wie oben das falsche Statement benutzt ist es absolut sicher. Und selbst dann kannst Du durch gruendliche Code-Pruefung und entsprechende Tests die Sicherheit hochschrauben, man muss halt nur wissen, wonach man zu suchen hat.
GNU C sagt einem uebrigens, dass es das falsche Statement ist: ich hatte den Code noch nicht getestet und es deswegen nicht gleich mitbekommen.
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.
Zum Thema Alternativen: die sind meistens genauso anfaellig gegen Angriffe, wie scanf. Die Fehler werden nur von anderen gemacht.
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.
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?
Das naechste Mal bitte nachdenken, bevor Du schreist.
SCNR, Konrad
- -- BOFH excuse #106:
The electrician didn't know what the yellow cable was so he yanked the ethernet out.