Vykon jsem s troskou sebezapreni ochoten uverit, ale bezpecnost C/C++ je legendarni. Neco tak spatne navrzeneho z hlediska bezpecnosti aby clovek pohledal.
Takle (v konkrétních příkladech) to samozřejmě platí, ale obecně se velmi málokdy dá říct, že jazyk A je bezpečnější (výkonnější) než jazyk B. Krom toho, ten příklad nedokazuje, že Java je bezpečnější než C, ale spíš to, že v C je těžší napsat program, který je v tomto ohledu (buffer overflow) bezpečný. Nebo ještě jinak – těžko lze tvrdit: „je to v jazyce XY, tak je to výkonné a bezpečné.“ Tyhle věci záleží mnohem víc na programátorovi, nasazení, úloze, knihovnách, administrátorovi.
>Krom toho, ten příklad nedokazuje, že Java je bezpečnější než C, ale spíš to, že v C je těžší napsat program, který je v tomto ohledu (buffer overflow) bezpečný.
V podstatě jinými slovy říkáš, že je java bezpečnější:)
V javě samozřejmě jde napsat útok typu buffer overflow, protože nakonec běží na stejném hardwaru jako program v C, ale je to prakticky nemožné(je třeba najít chybu v jvm a potom nějakým způsobem využít v javovském programu).
to ja naopak neverim moc tomu vykonu. O bezpecnost C++ bych se nebal, nikdy jsem nemel zadny vaznejsi problem, vlastne uprimne, mne osobne se bezpecna aplikace v C++ dela lip nez v PHP. Podle mne s bezpecnosti C/C++ maji problemy jen lide co jsou a) patlalove b) pouzivaji nevhodnou metodiku vyvoje a nastroje pro vyvoj
Kdo tohle pripustil v C, je zlocinec, ktery by mel byt exemplarne popraven tim nejnechutnejsim znamym zpusobem. Slova bezpecnost a C/C++ by se nemely objevovat v jedne spolecne vete. A to jsem jen u jednoho operatoru. Treba o ukazatelich by se daly psat eseje.
Jiste, genialni programator napise kod vzdy bezpecne, ale genialni programator neexistuje, a proto by jazyk mel byt od pocatku navrzen s tim, ze jej budou pouzivat omylni lide.
Vite ze Assembler je take programovaci jazyk? To je asi velmi spatne navrzeny, protoze v nem jdou delat chyby.
Svet neni CB, vse ma sva uskali, chce to pouze programatora, co si je uvedomuje. Uznavam, ze treba u open source to je trochu castejsi problem, protoze kdektery jouda se do projektu zapoji, pokud chce.
Assembler se bezpecnosti snad vubec nezabyva, navic to neni vyssi programovaci jazyk, takze ten argument moc nechapu.
Asi se shodnem, ze JAVA nebo Python je bezpecnejsi jazyk nez C, protoze nektere zhovadilosti tam udelat proste nejdou. Neznamena to ale, ze se v tech jazycich pisou programy bez chyby :-)
if ( a = b ) je docela sikovna moznost, prave pokud mate spravne nastroje a metodiky.
Takhle jak jste to napsal bez dalsi zavorky gcc hodi warning pri kompilaci, a pak jeste existuji veci jako splint a valgrind. To k tem nastrojum.
A pokud programujete s UnitTesty, tak vam nefunguji testy i kdyby to proslo skrz nastroje, takze to je ta cast s metodikou.
Na druhou stranu kdyz nactete ze vstupu od uzivatele 4096B, tak vite ze mate 4kB binarnich dat.. v PHP kdyz parsujete treba POST request a nedate si bacha na kodovani a validaci, tak vam treba nekdo podstrci nevalidni UTF-8 string ktery treba zpusobi ze vase dalsi kontroly neprokousaji pres cely obsah vstupu a nasledne vam premaze celou databazi. Porad myslite ze Buffer Overflow v C je nejvetsi zlo sveta? Ja myslim ze bezpecny jazyk neexistuje. Jsou jen aplikace ktere maji tak malo chyb, ze na ne nikdo neprijde a ty vypadaji bezpecne. Bez ohledu na programovaci jazyk.
Samozrejme kdyz upatlate 100 radkove C++ bez navrhu, testovani a dodrzovani urcite metodiky, tak nejspis budete mit v prumeru aspon jednu chybu na 10 radku, z toho 20% bude zpusobovat padani aplikace. U javy je jediny vetsi rozdil v tom ze to tolik nepada, mnozstvi chyb bude jen malinko nizsi, jenom se projevi mirneji. Co je nekdy jeste horsi, protoze si je pak nemusite vsimnout. Je pravda ze stejna aplikace ma obvykle v Jave kratsi zdrojovy kod, takze tam prijde dalsi snizeni absolutniho poctu chyb.
Ale rikat ze C/C++ je nebezpecne a Java je fajn je jako rikat ze F1 je nebezpecna a cestovni BMW je fajn … ale zkuste v 150km/h napalit do svodidel s F1 a pak s BMW (a hlavne to nezkousejte v opacnem poradi).
>U javy je jediny vetsi rozdil v tom ze to tolik nepada, mnozstvi chyb bude jen malinko nizsi, jenom se projevi mirneji. Co je nekdy jeste horsi, protoze si je pak nemusite vsimnout.
Já bych řekl, že to je přesně naopak. Java hodí výjimku, pokud se děje něco nekalého, ale v C/C++ se může stát, že program běží dál se špatnými daty a chyba se projeví jenom občas(např. překročení mezí polí, čtení neinicializovaného ukazatele). V podstatě jediná věc co mě napadá, která by mohla skrýt místo chyby je prázdný blok catch a to lze napsat v obou jazycích.