Giddion Skrevet 8. november 2005 Rapporter Del Skrevet 8. november 2005 Jeg har for tiden prøvd å sette meg inn i buffer overrun problemet. Så det jeg lurer på er hvor mye burde man egentlig beskytte seg mot dette problemet? Burde man fks. bytte ut alle string/minne operasjonen med en sikrere versjon, eller holder det med bytte ut operasjonene som har med nettverket å gjøre? Lenke til kommentar
teflonpanne Skrevet 8. november 2005 Rapporter Del Skrevet 8. november 2005 bruk std::string istedetfor char* og std::vector<T> istedetfor T* osv. det garanterer ikke at du ikke kan gjøre noe dumt og fortsatt få buffer overrun, men det gjør det mye lettere for deg å programmere "sikkert" samtidig som det går mye fortere siden du generelt har mindre sjangse for å gjøre noe feil og slipper debugging hele tida Lenke til kommentar
Giddion Skrevet 8. november 2005 Forfatter Rapporter Del Skrevet 8. november 2005 Vel jeg er ikke noen hacker guru, men jeg ville tro at std::string rent sikkerhetsmessig ikke er bedre en char* før man har dataene inn i std::string. Og det skal jo sies at man ikke alltid kan bruker std::string, fks når man leser filer eller får rådata fra fks. nettverk. Lenke til kommentar
Giddion Skrevet 8. november 2005 Forfatter Rapporter Del Skrevet 8. november 2005 Vel jeg er ikke noen hacker guru, men jeg ville tro at std::string rent sikkerhetsmessig ikke er bedre en char* før man har dataene inn i std::string. Og det skal jo sies at man ikke alltid kan bruker std::string, fks når man leser filer eller får rådata fra fks. nettverk. Lenke til kommentar
Dead_Rabbit Skrevet 8. november 2005 Rapporter Del Skrevet 8. november 2005 Vet ikke helt om jeg fårstår deg rett nå, Giddion, men grunnen til at man bruker std::string er jo for at ting nettopp skal bli "sikrere". std::string kontrollerer jo minnet sitt selv, så brukeren slipper å tenke på det. Lenke til kommentar
Peter Skrevet 9. november 2005 Rapporter Del Skrevet 9. november 2005 Men han har rett i at først må ting puttes inn i en std::string før det er sikkert. Ta f.eks. sockets. Der er du nødt til å opperere med char arrays før du kan putte arrayet ditt inn i en std::string. Dersom du leser mer enn du har allokert, er du ille ute. Lenke til kommentar
Dead_Rabbit Skrevet 9. november 2005 Rapporter Del Skrevet 9. november 2005 Ja, det er sant. Pleier alltid å sende en int som beskriver hvor mye jeg skal sende først jeg. Så lager jeg char*en basert på det. Kansje litt tregere enn det ellers ville ha blitt men. Lenke til kommentar
dayslepr Skrevet 9. november 2005 Rapporter Del Skrevet 9. november 2005 fordelen ved å bruke std-biblioteket her er at du bruker pointer-manipulering og array-stuff på et lite isolert område av koden din --- altså du wrapper socket send/recv o.l. .... presto; problem løst Lenke til kommentar
Peter Skrevet 9. november 2005 Rapporter Del Skrevet 9. november 2005 jaja, seff, men det er der problemene kan oppstå, mener jeg. Er ikke så lett å få bufferfeil senere kun ved bruk av standardklassene Lenke til kommentar
Giddion Skrevet 10. november 2005 Forfatter Rapporter Del Skrevet 10. november 2005 Beklager at jeg var litt uklar, men jeg tenkte på det samme som Nazgul Men han har rett i at først må ting puttes inn i en std::string før det er sikkert.Ta f.eks. sockets. Der er du nødt til å opperere med char arrays før du kan putte arrayet ditt inn i en std::string. Dersom du leser mer enn du har allokert, er du ille ute. Men dette gjelder jo andre ting også som fks. fopen Lenke til kommentar
Peter Skrevet 10. november 2005 Rapporter Del Skrevet 10. november 2005 (endret) Vi bruker da ikke fopen i C++! std::fstream er din venn. Eneste stedet jeg kan tenke meg at du må bruke char arrays in fstream er i read(), som du strengt tatt bare bruker når du driver med binæropperasjoner(Gjelder ihvertfall meg), og da lager du bare en liten wrapper, som dayslepr sa. Endret 10. november 2005 av Nazgul Lenke til kommentar
Giddion Skrevet 11. november 2005 Forfatter Rapporter Del Skrevet 11. november 2005 men jeg koder jo ikke alltid i C++, av å til syntes jeg det passer bedre med C Lenke til kommentar
Peter Skrevet 11. november 2005 Rapporter Del Skrevet 11. november 2005 Det er greit nok, men i forhold til hva alle andre har postet her (C++), så burde man bruke std::fstream for å sikre seg best mulig mot nettopp buffer overrun. C har ikke disse fine wrapperene Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå