Secure coding — dastur kodini keng tarqalgan weaknesslarni kamaytiradigan, ishonch chegaralarini aniq tekshiradigan va nosozlikni xavfsiz holatda boshqaradigan usulda yozish amaliyotidir. U faqat inputni filtrlash emas; identity, authorization, xotira xavfsizligi, cryptography, error handling, dependency va loglash qarorlarini ham qamrab oladi. Maqsad “xatosiz kod” va’dasi emas, ekspluatatsiya ehtimoli va ta’sirini tizimli kamaytirishdir.
Ishonchsiz ma’lumot
Tarmoq requesti, fayl, message queue, database’dagi oldingi yozuv va boshqa service javobi trust boundary’dan kelishi mumkin. Input schema type, uzunlik, format va ruxsat etilgan qiymatni tekshiradi. Normalizatsiya va validation tartibi muhim: bir xil qiymat turli encodingda tekshiruvni chetlab o‘tmasligi kerak.
Output encoding sink kontekstiga mos bo‘ladi. HTML text, attribute, URL, JavaScript va SQL bir xil escape qoidasiga ega emas. SQL uchun parameterized query, shell process uchun argument array, path uchun server-side ID mapping qo‘llanadi. Generic blacklist yangi variantlarga chidamsiz.
Identity va ruxsat
Authentication foydalanuvchini tanisa, authorization har obyekt va action uchun ruxsatni tekshiradi. Client yuborgan role yoki tenant ID ishonchli manba emas. Server identity contextni token va authoritative ma’lumotdan oladi. Default deny yangi endpointni tasodifan ochiq qoldirmaydi.
Least privilege service account, database role va filesystem ruxsatiga ham tegishli. Admin funksiyasi oddiy application processida doimiy credential bilan ishlamasligi kerak. Privilege qisqa muddat va audit bilan ko‘tariladi. Sensitive operation qayta autentifikatsiya yoki ikki tomon tasdig‘ini talab qilishi mumkin.
Secret va kriptografiya
Secret source code, command argument yoki logda saqlanmaydi. Secret manager rotation, access audit va qisqa muddatli credential beradi. Password adaptive password hash bilan, encryption key esa ma’lumotdan alohida boshqariladi. Custom cryptographic algorithm o‘rniga ko‘rib chiqilgan library va xavfsiz default ishlatiladi.
TLS certificate tekshiruvi o‘chirib qo‘yilmaydi. Random token cryptographically secure generator va yetarli entropy bilan yaratiladi. Encryption yaxlitlikni avtomatik bermaydigan rejimda authentication tag talab qilinadi. Error xabari padding yoki credential mavjudligi haqida oracle yaratmasligi kerak.
Xatolar va resurslar
Fail secure prinsipi tekshiruv ishlamay qolsa ruxsat bermaslikni anglatadi, ammo availabilityga ta’sir oldindan loyihalanadi. Exception klientga stack, path yoki query ochmaydi; correlation ID bilan internal logga bog‘lanadi. Logning o‘zi newline injection, secret va shaxsiy ma’lumotdan himoyalanadi.
Timeout, size limit, rate limit va cancel resurs tugashini cheklaydi. Retry faqat idempotent yoki idempotency key bilan himoyalangan operatsiyada bajariladi. Cleanup error path va early returnda ham lock, file hamda transactionni to‘g‘ri yopadi.
Muhandislik jarayoni
Secure coding standard til va frameworkga mos aniq patternlar beradi. Code review biznes invariantni, static analysis ma’lum data flow’ni, fuzzing esa kutilmagan inputni tekshiradi. Dependency pin, SBOM va update siyosati third-party kodni boshqaradi. Topilgan weakness regression test va root-cause tuzatish bilan yopiladi; faqat bitta payloadni bloklash yetarli emas.
Concurrency xavfsizligi
Authorization tekshiruvi bilan update orasidagi race boshqa requestga holatni o‘zgartirish imkonini berishi mumkin. Database constraint yoki atomic compare-and-set invariantni yakuniy storage’da himoya qiladi. Shared mutable state lock, immutable message yoki ownership bilan boshqariladi. Double-checked locking memory modelga mos primitive’siz stale obyekt ko‘rsatishi mumkin. Security-sensitive counter, nonce va rate limit distributed muhitda qaysi consistency kafolatiga tayanishi hujjatlashtiriladi. Test parallel request, retry va process crashni qamrab oladi; faqat ketma-ket unit test concurrency weaknessni ko‘rmaydi.
Bog‘liq tushunchalar
Input validation, Output encoding, Least privilege, Secret management, Secure SDLC, Code review, Defense in depth