Is wel makkelijk gezegd, maar zolang programmeurs nog vrolijk in C en C++ met pointers door blijven knutselen en de meest ranzige code hiermee schrijven, blijf je buffer overflows houden.
Als bij mij op school wordt geleerd om het volgende stukje code te schrijven:
void main() {
int aantal, i=1;
cin >> aantal;
while (i < aantal) {
printf("%d", aantal);
i++;
}
}
dan zie je toch zelf ook wel in dat je een infinte loop te wachten staat op het moment dat iemand daar een negatief of enorm groot getal, of nog erger, een string ingooit op de stdin?
Talen als java slaan je meteen om de oren als je bovenstaande doet, talen als C++ vinden het heel gewoon dat je een stream zo in een integer drukt, er is vast wel een convertor voor die de gare string naar een int weet te converteren.
Overigens hebben we bovenstaande ook een keer mogen toepassen bij een char buffer[12] en daar meteen met cin in proppen, heerlijk op het moment dat er 13 stuks in gaan
De i386 instructieset heeft al sinds het begin mogelijkheden om een geheugengebied als data of als codegeheugen aan te duiden, echter werd hier nooit veel mee gedaan. Met de hardwarematige protectie in CPUs is het een kwestie van bitje omzetten en de CPU weigert code in datasegmenten uit te voeren. Niet alleen is het feilloos, het is ook nog eens een stuk sneller om de check in hardware te doen. Overigens kan windows XP SP2 deze truc ook zonder NX ondersteuning doen, het gaat alleen iets trager. Linux heeft dit soort ongein al tijden mbv kernelpatches als PaX en Grsecurity. Veel hiervan is afgekeken uit OpenBSD, welke dit soort technieken al sinds de oertijd ondersteunt.
Dit is een van de eerste onderdelen van basis programmeren om de propositielogica te leren, en de excepties ook te ondervangen ja. Echt belangrijk is dit niet en eerlijk gezegd mis ik de relevantie t.a.v. DOS attacks.
Je kan het wel op fout programmeren gooien, of menselijkheid, maar wat betrefd veiligheid: ieder slot op elke deur is te openen, de betere sloten duren gewoon langer om te openen.
Niets is potdicht te krijgen.
laatste oneliner:
echt hacken is saai.
Het gros van de code in deze wereld wordt gehacked door mensen die geen jota van propositielogica afweten.
en das nou net weer de kracht van C/C++
je KUNT alles doen wat je wilt. En das toch ook heel de bedoeling hiervan?
Heb je echt belangrijke software, die je door MBOer of slechte HBOer laat maken, kun je dat dan het beste in java laten doen zodat je minste problemen hebt.
Als je fatsoenlijk programeert doe je dat gewoon lekker in C. Is netjes mooi en eigenlijk wel simpel als je weet wat je doet.
Das ook btw ff belangrijk, weten wat je doet. Het is belangrijk dat je verstand van je vak hebt. Je moet weten wat je doet. Ik breng mijn auto (die ik niet heb) ook niet naar Harries Auto Worksjop omdat ie goedkoper is. Kans is vrij groot dat je auto er straks erger aan toe is dan dat je hem heenbracht. Kwaliteit komt van kennis. Niet door tools alles voor je te laten doen. Das gewoon lomp en had je beter een ander vak kunnen kiezen.
Heb je echt belangrijke software, die je door MBOer of slechte HBOer laat maken, kun je dat dan het beste in java laten doen zodat je minste problemen hebt.
Zie voor diverse Java vacatures dat men mensen met een universitaire opleiding vragen (of toppers van HBO).
C++ en Java hebben beiden hun krachten, voor- en nadelen.
Ikzelf ben eigenlijk beetje met Java opgeleid, door zeer slechte/saaie/weinig les in C++ vind ik die taal ook niet leuk. Mijn voorkeur als hbo'er gaat persoonlijk dan ook uit naar Java (en C#).
Als je fatsoenlijk programeert doe je dat gewoon lekker in C. Is netjes mooi en eigenlijk wel simpel als je weet wat je doet.
Je beargumenteerd ook niet echt lekker, ik zou ook kunnen zeggen:
C++ bestaat nu alweer zo lang, het wordt tijd dat we gaan moderniseren en met nieuwere en moderenere talen aan de slag gaan, zoals Java en C#.