gets unsafe?



  • hallo,
    das ist die warnung meines compilers:

    warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead.

    wann könnte das der fall sein, das gets unsicher ist ?



  • Wenn du es benutzt. Dann ist es unsicher.

    man gets schrieb:

    The gets() function cannot be used securely. Because of its lack of
    bounds checking, and the inability for the calling program to reliably
    determine the length of the next incoming line, the use of this function
    enables malicious users to arbitrarily change a running program's func-
    tionality through a buffer overflow attack. It is strongly suggested
    that the fgets() function be used in all cases.



  • ^^wenn mehr zeichen reinkommen, als in deinen buffer passen, zersemmenlt 'gets' das, was danach im speicher ist.
    🙂



  • ~fricky schrieb:

    ^^wenn mehr zeichen reinkommen, als in deinen buffer passen, zersemmenlt 'gets' das, was danach im speicher ist.
    🙂

    wenn ich das so mache:

    char buf[BUFSIZ];
    gets(buf);
    

    dann müsste das doch sicher sein, oder?



  • safety n00b schrieb:

    wenn ich das so mache:

    char buf[BUFSIZ];
    gets(buf);
    

    dann müsste das doch sicher sein, oder?

    warum sollte es? 'gets' weiss nicht, wie gross der buffer ist.
    🙂



  • safety n00b schrieb:

    wenn ich das so mache:

    char buf[BUFSIZ];
    gets(buf);
    

    dann müsste das doch sicher sein, oder?

    Begruende mir bitte warum ich jetzt nicht BUFSIZ+1 chars eingeben kann.



  • du kannst es möglicher weise. ich nicht, weil meine konsole nicht mehr hergibt.



  • ~fricky schrieb:

    safety n00b schrieb:

    wenn ich das so mache:

    char buf[BUFSIZ];
    gets(buf);
    

    dann müsste das doch sicher sein, oder?

    warum sollte es? 'gets' weiss nicht, wie gross der buffer ist.
    🙂

    ich dachte immer, das wäre eine an die konsole angepasste puffergröße. was passiert denn mit den übrigen zeichen, wenn ich fgets nehme



  • safety n00b schrieb:

    ~fricky schrieb:

    safety n00b schrieb:

    wenn ich das so mache:

    char buf[BUFSIZ];
    gets(buf);
    

    dann müsste das doch sicher sein, oder?

    warum sollte es? 'gets' weiss nicht, wie gross der buffer ist.
    🙂

    ich dachte immer, das wäre eine an die konsole angepasste puffergröße.

    Wer sagt denn überhaupt, dass die Eingabe von einer Konsole kommt?

    was passiert denn mit den übrigen zeichen, wenn ich fgets nehme

    Werden halt abgeschnitten.



  • SG1 schrieb:

    was passiert denn mit den übrigen zeichen, wenn ich fgets nehme

    Werden halt abgeschnitten.

    ...und beim nächsten fgets gelesen.


Anmelden zum Antworten