secure coding
Főnév
secure coding (tsz. secure codings)
- (informatika) A secure coding (biztonságos kódolás) olyan szoftverfejlesztési gyakorlat, amelynek célja, hogy a programkód ellenálljon a támadásoknak, csökkentse a sebezhetőségek számát, és biztosítsa az adatok integritását, bizalmasságát és elérhetőségét. A secure coding nemcsak a kódolási stílusról szól, hanem a fejlesztési ciklus teljes biztonságtudatos megközelítéséről.
1. A secure coding jelentősége
A modern alkalmazások folyamatosan ki vannak téve kibertámadásoknak: SQL injection, cross-site scripting (XSS), buffer overflow, remote code execution (RCE), privilege escalation, stb. A nem biztonságos kód könnyen kiaknázható lehet, és súlyos adatvédelmi vagy rendszerintegritási problémákat okozhat. A secure coding célja ezek megelőzése.
Példa:
Ha egy webalkalmazás nem ellenőrzi a bemeneti adatokat, akkor egy támadó SQL kódot illeszthet be, és adatokat lophat el az adatbázisból.
2. Alapelvek
1. Input validáció
Minden külső adat potenciálisan veszélyes. A bemeneti adatokat mindig érvényesíteni kell – típus, hossz, tartalom, formátum alapján.
Helyes példa C++-ban:
if (userInput.length() < 30 && std::all_of(userInput.begin(), userInput.end(), ::isalnum)) {
process(userInput);
}
2. Output escaping
Az adatok kimenet előtti escape-elése megakadályozza a szkriptek vagy speciális karakterek nem kívánt futtatását (pl. HTML vagy JavaScript esetén).
3. Least privilege
A program csak a legszükségesebb jogosultságokkal fusson – így, ha egy komponens sérül, korlátozott károkat okozhat.
4. Error handling
A hibakezelés során soha ne tárjuk fel az érzékeny információkat (pl. stack trace, adatbázis hibák). A hibaüzenetek legyenek felhasználóbarátok és ne áruljanak el belső részleteket.
5. Secure defaults
Alapértelmezett beállításként a rendszer legyen biztonságos, ne nyitott vagy engedékeny.
3. Gyakori sebezhetőségek és megoldások
1. Buffer Overflow
A memóriaterület túlírása, ami rendszerösszeomlást vagy kódfuttatást okozhat.
Védekezés:
- Határolt bemeneti függvények használata (pl.
strncpyastrcpyhelyett) - Stack canary használata
- DEP (Data Execution Prevention), ASLR
2. SQL Injection
Támadó SQL parancsot illeszt be az adatbázis lekérdezésbe.
Védekezés:
- Paraméterezett lekérdezések
- ORM használat
- Input szűrés
Helytelen példa:
"SELECT * FROM users WHERE username = '" + user + "';"
Helyes példa (C++ + SQLite):
sqlite3_prepare_v2(db, "SELECT * FROM users WHERE username = ?", -1, &stmt, 0);
sqlite3_bind_text(stmt, 1, user.c_str(), -1, SQLITE_TRANSIENT);
3. Cross-site scripting (XSS)
Támadó szkriptet juttat el a felhasználó böngészőjébe.
Védekezés:
- HTML escape
- Content Security Policy (CSP)
- Bemeneti adatok megtisztítása
4. Hardcoded jelszavak
Soha ne tároljunk jelszót, API kulcsot a forráskódban.
Megoldás:
- Környezeti változók használata
- Biztonságos titkos tárolók (pl. HashiCorp Vault)
5. Insecure deserialization
Ha a támadó manipulálni tudja a deszerializált adatot, akkor akár távoli kódvégrehajtást is elérhet.
Megoldás:
- Validáció deszerializálás előtt
- Digitális aláírás az adatokra
4. További best practice-ek
Kódminőség
A jól strukturált, tiszta kód segíti a biztonságos működést. A bonyolult, “spagetti” kód nagyobb eséllyel tartalmaz hibát.
Statikus és dinamikus elemzés
- Statikus: kódelemző eszközök (pl. SonarQube, cppcheck)
- Dinamikus: futásidejű tesztelés (pl. fuzzing, ASAN, Valgrind)
Kód review
A peer review kötelező. Több szem többet lát, különösen biztonsági szempontból.
Automatizált tesztek
Unit tesztek, integrációs tesztek segítenek észrevenni regressziókat vagy újonnan bevezetett sebezhetőségeket.
Frissítések és patchek
A biztonsági hibák gyakran nyílt könyvtárakból származnak. Követni kell a függőségek verzióját, és időben javítani a sebezhetőségeket.
5. Kódolási szabványok
Számos iparági ajánlás létezik:
- CERT Secure Coding Standards
- OWASP Secure Coding Practices
- MISRA (C/C++ specifikus)
- SEI CERT C/C++ Coding Standard
6. Függőségek és külső könyvtárak
A harmadik féltől származó kód kockázatot jelent.
Ajánlások:
- Csak megbízható forrásból használjunk könyvtárat
- Verzió rögzítése (pl.
vcpkg.json,conanfile.txt) - Ellenőrzés CVE adatbázisból
7. Biztonság a fejlesztési életciklusban
Secure SDLC (Secure Software Development Lifecycle):
- Követelmény: biztonsági követelmények meghatározása
- Tervezés: fenyegetésmodellezés (pl. STRIDE, DFD)
- Implementáció: secure coding irányelvek követése
- Tesztelés: penetrációs tesztek, automatizált eszközök
- Karbantartás: hibák javítása, frissítések
8. Példák C++-ban
Nem biztonságos:
char name[10];
strcpy(name, input); // buffer overflow lehetséges
Biztonságosabb:
char name[10];
strncpy(name, input, sizeof(name) - 1);
name[sizeof(name) - 1] = '\0';
9. Eszközök
- Valgrind – memóriaszivárgás és túlírás keresése
- AddressSanitizer – runtime memóriatesztelés
- Clang Static Analyzer / cppcheck – hibás konstrukciók keresése
- OWASP Dependency-Check – sebezhető függőségek
10. Zárszó
A secure coding nem egy eszköz, hanem egy szemlélet. A fejlesztői gondolkodás részeként kell kezelni. A sebezhetőségek nem mindig a rossz szándékból erednek, hanem gyakran figyelmetlenségből vagy hiányos tudásból. A biztonságos kódolás célja, hogy ezt a kockázatot minimalizálja. Egy biztonságos program mindig kiszámíthatóan viselkedik, védi az adatokat, és ellenáll a támadásoknak – ez az, amit minden fejlesztőnek célként kell kitűznie.
- secure coding - Szótár.net (en-hu)
- secure coding - Sztaki (en-hu)
- secure coding - Merriam–Webster
- secure coding - Cambridge
- secure coding - WordNet
- secure coding - Яндекс (en-ru)
- secure coding - Google (en-hu)
- secure coding - Wikidata
- secure coding - Wikipédia (angol)