Dasturchilar va xavfsizlik muhandislari uchun SAST, DAST va SCA yordamida XSS, SQLi va boshqalar kabi keng tarqalgan zaifliklar uchun TypeScript kodini qanday tekshirish bo'yicha keng qamrovli qo'llanma.
TypeScript Xavfsizlik Auditlari: Zaiflik Turlarini Aniqlashga Chuqur Sho'ng'ish
TypeScript JavaScript moslashuvchanligi ustiga statik yozishning mustahkamligini taklif qilib, ishlab chiqish dunyosini hayratga soldi. U Angular va React kabi freymvorklar bilan murakkab frontend ilovalaridan tortib Node.js bilan yuqori unumdorlikka ega backend xizmatlarigacha bo'lgan hamma narsani quvvatlantiradi. TypeScript kompilyatori turga bog'liq xatolarni ushlash va kod sifatini yaxshilashda a'lo bo'lsa-da, fundamental haqiqatni tushunish juda muhim: TypeScript xavfsizlik uchun sehrli tayoqcha emas.
Tur xavfsizligi null pointer xatoliklari yoki funktsiyalarga noto'g'ri ma'lumotlar turlari o'tkazilishi kabi xatoliklarning muayyan sinfining oldini oladi. Biroq, u o'z-o'zidan mantiqiy xavfsizlik kamchiliklarining oldini olmaydi. Saytlararo skriptlar (XSS), SQL in'ektsiyasi (SQLi) va buzilgan kirishni boshqarish kabi zaifliklar ilova mantig'i va ma'lumotlarni qayta ishlashda ildiz otadi, bu sohalar tur tekshirgichining bevosita doirasidan tashqarida.
Ushbu keng qamrovli qo'llanma dasturchilar, xavfsizlik mutaxassislari va muhandislik rahbarlarining global auditoriyasi uchun mo'ljallangan. Biz TypeScript xavfsizligi landshaftini o'rganamiz, eng keng tarqalgan zaiflik turlarini o'rganamiz va statik tahlil (SAST), dinamik tahlil (DAST) va dasturiy ta'minot tarkibini tahlil qilish (SCA) kombinatsiyasidan foydalangan holda ularni aniqlash va yumshatish bo'yicha amaliy strategiyalarni taqdim etamiz.
TypeScript Xavfsizlik Landshaftini Tushunish
Muayyan aniqlash usullariga sho'ng'ishdan oldin, odatdagi TypeScript ilovasi uchun xavfsizlik kontekstini shakllantirish muhim. Zamonaviy ilova birinchi tomon kodi, uchinchi tomon kutubxonalari va infratuzilma konfiguratsiyalarining murakkab tizimidir. Ushbu qatlamlardan biridagi zaiflik butun tizimga putur etkazishi mumkin.
Nega Tur Xavfsizligi Yetarli Emas
TypeScript-da ushbu oddiy Express.js kod parchasini ko'rib chiqing:
import express from 'express';
import { db } from './database';
const app = express();
app.get('/user', async (req, res) => {
const userId: string = req.query.id as string;
// The type is correct, but the logic is flawed!
const query = `SELECT * FROM users WHERE id = '${userId}'`;
const user = await db.query(query);
res.json(user);
});
TypeScript kompilyatori nuqtai nazaridan, bu kod to'liq amal qiladi. `userId` to'g'ri `string` sifatida yozilgan. Biroq, xavfsizlik nuqtai nazaridan, unda klassik SQL in'ektsiyasi zaifligi mavjud. Hujumchi autentifikatsiyani chetlab o'tish va bazadan barcha foydalanuvchilarni olish uchun `userId` ni ' OR 1=1; -- kabi taqdim etishi mumkin. Bu xavfsizlik auditining to'ldirishi kerak bo'lgan bo'shliqni ko'rsatadi: nafaqat uning turini, balki ma'lumotlar oqimini va qayta ishlanishini tahlil qilish.
TypeScript Ilovalaridagi Umumiy Hujum Vektorlari
JavaScript ilovalarida topilgan ko'pgina zaifliklar TypeScript-da ham keng tarqalgan. Audit paytida qidiruvingizni OWASP Top 10 kabi yaxshi tashkil etilgan toifalar atrofida shakllantirish foydali:
- In'ektsiya: Ishonchsiz ma'lumotlar buyruq yoki so'rovning bir qismi sifatida tarjimoniga yuboriladigan SQLi, NoSQLi, Buyruq In'ektsiyasi va Log In'ektsiyasi.
- Saytlararo skriptlar (XSS): Ishonchsiz ma'lumotlar to'g'ri qochirilmasdan veb-sahifaga kiritilgan Stored, reflected va DOM asosidagi XSS.
- Xavfli deserializatsiya: Ishonchsiz ma'lumotlarni deserializatsiya qilish, agar ilovaning mantig'ini manipulyatsiya qilish mumkin bo'lsa, masofadan kodni bajarishga (RCE) olib kelishi mumkin.
- Buzilgan Kirishni Boshqarish: Foydalanuvchilarga ma'lumotlarga kirishga yoki qilmasliklari kerak bo'lgan harakatlarni bajarishga imkon beradigan ruxsatlarni amalga oshirishdagi kamchiliklar.
- Sezgir Ma'lumotlarning Ta'siri: Qattiq kodlangan sirlar (API kalitlari, parollar), zaif kriptografiya yoki jurnallarda yoki xabar xabarlarida sezgir ma'lumotlarni oshkor qilish.
- Ma'lum Zaifliklarga ega Komponentlardan Foydalanish: Hujjatlashtirilgan xavfsizlik kamchiliklari bilan uchinchi tomon `npm` paketlariga tayanib.
TypeScript-da Statik Tahlil Xavfsizlik Testi (SAST)
Statik Tahlil Xavfsizlik Testi yoki SAST uning manba kodini ishga tushirmasdan xavfsizlik zaifliklari uchun ilovaning manba kodini tahlil qilishni o'z ichiga oladi. TypeScript kabi kompilyatsiya qilingan til uchun bu aql bovar qilmaydigan kuchli yondashuv, chunki biz kompilyator infratuzilmasidan foydalanishimiz mumkin.
TypeScript Abstrakt Sintaksis Daraxtining (AST) Kuchliligi
TypeScript kompilyatori kodingizni qayta ishlaganda, u birinchi navbatda Abstrakt Sintaksis Daraxtini (AST) yaratadi. AST - bu kod tuzilishining daraxt ko'rinishi. Daraxtdagi har bir tugun o'zgaruvchan deklaratsiya, funktsiya chaqiruvi yoki ikkilik ifoda kabi konstruktni ifodalaydi. Ushbu daraxt bo'ylab dasturiy tarzda harakatlanib, SAST vositalari kodning mantig'ini va eng muhimi, ma'lumotlar oqimini kuzatishi mumkin.
Bu bizga dog' tahlilini bajarishga imkon beradi: ishonchsiz foydalanuvchi kiritishi ("manba") ilova orqali o'tib, to'g'ri sanitariya yoki tekshiruvsiz potentsial xavfli funktsiyaga ("sink") yetib borishini aniqlash.
SAST bilan Zaiflik Modellarini Aniqlash
In'ektsiya Kamchiliklari (SQLi, NoSQLi, Buyruq In'ektsiyasi)
- Naqsh: Foydalanuvchi tomonidan boshqariladigan kirish to'g'ridan-to'g'ri birlashtirilgan yoki satrlarga interpolatsiya qilinayotganini qidirib toping, so'ngra ma'lumotlar bazasi drayveri, shell yoki boshqa tarjimon tomonidan bajariladi.
- Manbalar (Dog'ning Kelib Chiqishi): Express/Koa-da `req.body`, `req.query`, `req.params`, `process.argv`, faylni o'qish.
- Sinklar (Xavfli Funktsiyalar): `db.query()`, `Model.find()`, `child_process.exec()`, `eval()`.
- Zaif Misol (SQLi):
// SOURCE: req.query.category is untrusted user input const category: string = req.query.category as string; // SINK: The category variable flows into the database query without sanitization const products = await db.query(`SELECT * FROM products WHERE category = '${category}'`); - Aniqlash Strategiyasi: SAST vositasi `req.query` dan `db.query` gacha bo'lgan `category` o'zgaruvchisini kuzatib boradi. Agar u o'zgaruvchan cho'milishga o'tkazilgan satr shablonining bir qismi ekanligini aniqlasa, u potentsial in'ektsiya zaifligini belgilaydi. Tuzatish - bu ma'lumotlar bazasi drayveri qochishni to'g'ri bajaradigan parametrlashtirilgan so'rovlardan foydalanish.
Saytlararo skriptlar (XSS)
- Naqsh: Ishonchsiz ma'lumotlar HTML konteksti uchun to'g'ri qochirilmasdan DOMga ko'rsatiladi.
- Manbalar: API, shakllar yoki URL parametrlari orqali foydalanuvchi tomonidan taqdim etilgan har qanday ma'lumotlar.
- Sinklar: `element.innerHTML`, `document.write()`, React ning `dangerouslySetInnerHTML`, Vue ning `v-html`.
- Zaif Misol (React):
function UserComment({ commentText }: { commentText: string }) { // SOURCE: commentText comes from an external source // SINK: dangerouslySetInnerHTML writes raw HTML to the DOM return ; } - Aniqlash Strategiyasi: Audit jarayoni ushbu xavfli DOM manipulyatsiya sinklarining barcha ishlatilishini aniqlashni o'z ichiga oladi. Keyin vosita ma'lumotlarning ishonchsiz manbadan kelib chiqishini ko'rish uchun orqaga ma'lumotlar oqimini tahlil qiladi. React va Angular kabi zamonaviy frontend freymvorklari sukut bo'yicha avtomatik qochishni ta'minlaydi, shuning uchun asosiy e'tibor yuqorida ko'rsatilgan kabi ataylab bekor qilishga qaratilishi kerak.
Xavfli Deserializatsiya
- Naqsh: Ilova ishonchsiz manbadan ma'lumotlarni deserializatsiya qilish uchun funktsiyadan foydalanadi, bu potentsial ravishda ixtiyoriy sinflarni namoyon qilishi yoki kodni bajarishi mumkin.
- Manbalar: Foydalanuvchi tomonidan boshqariladigan cookie fayllari, API yuklari yoki fayldan o'qilgan ma'lumotlar.
- Sinklar: `node-serialize`, `serialize-javascript` (muayyan konfiguratsiyalarda) yoki maxsus deserializatsiya mantig'i kabi xavfli kutubxonalarning funktsiyalari.
- Zaif Misol:
import serialize from 'node-serialize'; app.post('/profile', (req, res) => { // SOURCE: req.body.data is fully controlled by the user const userData = Buffer.from(req.body.data, 'base64').toString(); // SINK: Insecure deserialization can lead to RCE const obj = serialize.unserialize(userData); // ... process obj }); - Aniqlash Strategiyasi: SAST vositalari ma'lum bo'lgan xavfli deserializatsiya funktsiyalari ro'yxatini saqlaydi. Ular ushbu funktsiyalarga har qanday qo'ng'iroqlar uchun kod bazasini skanerlaydi va ularni belgilaydi. Asosiy yumshatish - bu ishonchsiz ma'lumotlarni deserializatsiya qilishdan qochish yoki `JSON.parse()` bilan JSON kabi xavfsiz, faqat ma'lumotlar formatlaridan foydalanish.
TypeScript Ilovalari uchun Dinamik Tahlil Xavfsizlik Testi (DAST)
SAST kodni ichkaridan tashqariga tahlil qilsa-da, Dinamik Tahlil Xavfsizlik Testi (DAST) tashqaridan ichkariga ishlaydi. DAST vositalari ishlayotgan ilova bilan o'zaro aloqada bo'ladi - odatda sahnalashtirish yoki sinov muhitida - va xuddi haqiqiy hujumchi kabi zaifliklarni tekshiradi. Ularda manba kodi haqida hech qanday ma'lumot yo'q.
Nega DAST SASTni To'ldiradi
DAST zarur, chunki u SAST o'tkazib yuborishi mumkin bo'lgan muammolarni aniqlashi mumkin, masalan:
- Muhit va Konfiguratsiya Muammolari: noto'g'ri sozlangan server, noto'g'ri HTTP xavfsizlik sarlavhalari yoki ochiq boshqaruv oxirgi nuqtalari.
- Runtime Zaifliklari: Faqat ilova ishlayotgan va boshqa xizmatlar bilan o'zaro aloqada bo'lganda namoyon bo'ladigan kamchiliklar, masalan, ma'lumotlar bazasi yoki kesh qatlami.
- Murakkab Biznes Mantiqiy Kamchiliklari: Faqat statik tahlil bilan modellashtirish qiyin bo'lgan ko'p bosqichli jarayonlardagi muammolar (masalan, to'lov oqimi).
TypeScript API va Veb-ilovalar uchun DAST Usullari
API Oxirgi Nuqtalarini Fuzzlash
Fuzzing ilovaning qanday javob berishini ko'rish uchun API oxirgi nuqtalariga kutilmagan, buzilgan yoki tasodifiy ma'lumotlarning katta hajmini yuborishni o'z ichiga oladi. TypeScript backend uchun bu quyidagini anglatishi mumkin:
- NoSQL in'ektsiyasi yoki resurslarni charchash uchun POST oxirgi nuqtasiga chuqur joylashtirilgan JSON ob'ektini yuborish.
- Axborotni sizdirishi mumkin bo'lgan yomon xatolarni bartaraf etishni aniqlash uchun raqamlar kutilgan satrlarni yoki booleanlar kutilgan butun sonlarni yuborish.
- In'ektsiya va XSS kamchiliklarini tekshirish uchun barcha parametrlarga maxsus belgilarni (`'`, `"`, `<`, `>`) kiritish.
Haqiqiy Dunyo Hujumlarini Simulyatsiya Qilish
DAST skaneri ma'lum hujum yuklamalari kutubxonasiga ega bo'ladi. U kirish maydonini yoki API parametrini aniqlaganda, u ushbu yuklamalarni tizimli ravishda kiritadi va ilovaning javobini tahlil qiladi.
- SQLi uchun: U `1' UNION SELECT username, password FROM users--` kabi yuklamani yuborishi mumkin. Agar javobda sezgir ma'lumotlar bo'lsa, oxirgi nuqta zaif.
- XSS uchun: U `` yuborishi mumkin. Agar javob HTML-da aynan shu, qochirilmagan satr mavjud bo'lsa, bu aks ettirilgan XSS zaifligini ko'rsatadi.
Keng Qamrovli Qamrov uchun SAST, DAST va SCA ni Birlashtirish
SAST ham, DAST ham yolg'iz etarli emas. Yetuk xavfsizlik auditi strategiyasi ikkalasini ham uchinchi muhim komponent bilan birlashtiradi: Dasturiy ta'minot tarkibini tahlil qilish (SCA).
Dasturiy Ta'minot Tarkibini Tahlil Qilish (SCA): Ta'minot Zanjiri Muammosi
Ko'pgina TypeScript backend ishlanmalariga asoslangan Node.js ekotizimi `npm` registrida ochiq kodli paketlarga katta bog'liqdir. Bitta loyiha yuzlab yoki hatto minglab to'g'ridan-to'g'ri va o'tuvchi bog'liqliklarga ega bo'lishi mumkin. Ushbu paketlardan biridagi zaiflik sizning ilovangizdagi zaiflikdir.
SCA vositalari sizning bog'liqlik manifest fayllaringizni skanerlash orqali ishlaydi (`package.json` va `package-lock.json` yoki `yarn.lock`). Ular siz foydalanayotgan paketlarning versiyalarini ma'lum zaifliklarning global ma'lumotlar bazasiga (GitHub Maslahat Ma'lumotlar Bazasi kabi) solishtiradi.
Muhim SCA Vositalari:
- `npm audit` / `yarn audit`: zaif bog'liqliklarni tekshirishning tezkor usulini ta'minlaydigan o'rnatilgan buyruqlar.
- GitHub Dependabot: Zaif bog'liqliklarni yangilash uchun avtomatik ravishda repozitoriylarni skanerlaydi va tortish so'rovlarini yaratadi.
- Snyk Open Source: Batafsil zaiflik ma'lumotlari va tuzatish bo'yicha maslahatlarni taklif qiluvchi mashhur tijorat vositasi.
"Chapga Siljish" Xavfsizlik Modelini Amalga Oshirish
"Chapga siljish" dasturiy ta'minotni ishlab chiqish tsikliga (SDLC) imkon qadar erta xavfsizlik amaliyotlarini birlashtirishni anglatadi. Maqsad - zaifliklarni eng arzon va oson hal qilishda - ishlab chiqish davrida topish va tuzatish.
TypeScript loyihasi uchun zamonaviy, xavfsiz CI/CD quvuri quyidagicha ko'rinishi kerak:
- Dasturchi Mashinasi: IDE plaginlari va oldindan topshirish ilgaklari linters va engil SAST skanerlarini ishga tushiradi.
- Topshirish/Tortish So'rovi bo'yicha: CI serveri keng qamrovli SAST skaneri va SCA skanerini ishga tushiradi. Agar jiddiy zaifliklar aniqlansa, qurilish muvaffaqiyatsiz tugaydi.
- Sahnalashtirishga Qo'shilish bo'yicha: Ilova sahnalashtirish muhitiga joylashtiriladi. Keyin CI serveri ushbu jonli muhitga qarshi DAST skanerini ishga tushiradi.
- Ishlab Chiqarishga Joylashtirish bo'yicha: Barcha tekshiruvlar o'tgandan so'ng, kod joylashtiriladi. Uzluksiz monitoring va runtime himoya vositalari o'z zimmalariga oladi.
Amaliy Asboblar va Amalga Oshirish
Nazariya muhim, lekin amaliy amalga oshirish asosiy hisoblanadi. TypeScript ishlab chiqish ish jarayoniga integratsiya qilish uchun ba'zi vositalar va usullar.
Xavfsizlik uchun Muhim ESLint Plaginlari
ESLint - JavaScript va TypeScript uchun kuchli, sozlanishi mumkin bo'lgan linter. Siz uni xavfsizlikka xos plaginlarni qo'shish orqali engil, dasturchiga yo'naltirilgan SAST vositasi sifatida ishlatishingiz mumkin:
- `eslint-plugin-security`: Qochirilmagan o'zgaruvchilar bilan `child_process.exec()` dan foydalanish yoki Xizmatdan Voz Kechishga (DoS) olib kelishi mumkin bo'lgan xavfli regex naqshlarini aniqlash kabi umumiy Node.js xavfsizlik xatolarini ushlaydi.
- `eslint-plugin-no-unsanitized`: `innerHTML`, `outerHTML` va boshqa xavfli xususiyatlardan foydalanishni belgilash orqali XSS ning oldini olishga yordam beradigan qoidalarni taqdim etadi.
- Maxsus Qoidalar: Tashkilotga xos xavfsizlik siyosatlari uchun siz o'zingizning ESLint qoidalarini yozishingiz mumkin. Misol uchun, siz eskirgan ichki kriptografiya kutubxonasini import qilishni taqiqlovchi qoidani yozishingiz mumkin.
CI/CD Quvur Integratsiya Misoli (GitHub Harakatlari)
SCA va SASTni o'z ichiga olgan GitHub Harakatlari ish jarayonining soddalashtirilgan misoli:
name: TypeScript Security Scan
on: [pull_request]
jobs:
security-check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run dependency audit (SCA)
# --audit-level=high fails the build for high-severity vulnerabilities
run: npm audit --audit-level=high
- name: Run security linter (SAST)
run: npx eslint . --ext .ts --quiet
# Example of integrating a more advanced SAST scanner like CodeQL
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: typescript
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
Koddan Tashqari: Runtime va Arxitektura Xavfsizligi
Keng qamrovli audit, shuningdek, kengroq arxitektura va runtime muhitini hisobga oladi.
Turga Xavfsiz API
Frontend va backend o'rtasida xatoliklarning butun sinflarining oldini olishning eng yaxshi usullaridan biri bu API chegarasida tur xavfsizligini ta'minlashdir. tRPC, Kod yaratish bilan GraphQL (masalan, GraphQL Kod Generatori) yoki OpenAPI generatorlari kabi vositalar mijoz va server o'rtasida turlarni almashishga imkon beradi. Agar siz backend API javob turini o'zgartirsangiz, TypeScript frontend kodingiz kompilyatsiya qilishda muvaffaqiyatsiz bo'ladi, bu esa runtime xatolarining oldini oladi va ma'lumotlar shartnomalarining nomuvofiqligi tufayli xavfsizlik muammolarini keltirib chiqaradi.
Node.js Eng Yaxshi Amaliyotlari
Ko'pgina TypeScript ilovalari Node.js-da ishlayotganligi sababli, platformaga xos eng yaxshi amaliyotlarga rioya qilish juda muhim:
- Xavfsizlik Sarlavhalaridan Foydalaning: XSS va boshqa mijoz tomonlama hujumlarni yumshatishga yordam beradigan muhim HTTP sarlavhalarini (`Content-Security-Policy`, `X-Content-Type-Options` va boshqalar) o'rnatish uchun Express uchun `helmet` kabi kutubxonalardan foydalaning.
- Eng Kam Imtiyoz bilan Ishga Tushiring: Node.js jarayonini root foydalanuvchisi sifatida, ayniqsa konteyner ichida ishga tushirmang.
- Runtime-larni Yangilab Turing: Xavfsizlik tuzatishlarini olish uchun Node.js va TypeScript versiyalarini muntazam ravishda yangilab turing.
Xulosa va Amaliy Xulosalar
TypeScript ishonchli va saqlanib turadigan ilovalarni yaratish uchun ajoyib asosni taqdim etadi. Biroq, xavfsizlik alohida va ataylab qilingan amaliyotdir. U statik kod tahlili, dinamik runtime sinovi va hushyor ta'minot zanjiri boshqaruvini birlashtirgan ko'p qatlamli mudofaa strategiyasini talab qiladi.
Umumiy zaiflik turlarini tushunib, to'g'ri vositalar va jarayonlarni ishlab chiqish tsiklingizga integratsiya qilib, siz TypeScript ilovalaringizning xavfsizlik holatini sezilarli darajada yaxshilashingiz mumkin.
Dasturchilar uchun Amaliy Qadamlar
- Qat'iy Rejimni Yoqing: `tsconfig.json` da `"strict": true` o'rnating. Bu umumiy xatolarning oldini oladigan tur tekshirish xatti-harakatlar to'plamini yoqadi.
- Kodingizni Lint qiling: Loyihangizga `eslint-plugin-security` qo'shing va u xabar qilgan muammolarni hal qiling.
- Bog'liqliklaringizni Audit qiling: Muntazam ravishda `npm audit` yoki `yarn audit` ni ishga tushiring va bog'liqliklaringizni yangilab turing.
- Hech Qachon Foydalanuvchi Kiritishiga Ishonmang: Ilovangizdan tashqaridan kelayotgan barcha ma'lumotlarga potentsial zararli deb qarang. U har doim ishlatiladigan kontekst uchun to'g'ri tarzda tekshiriladi, sanitariya qilinadi yoki qochiriladi.
Jamoalar va Tashkilotlar uchun Amaliy Qadamlar
- CI/CD da Xavfsizlikni Avtomatlashtiring: SAST, DAST va SCA skanerlarini to'g'ridan-to'g'ri qurilish va joylashtirish quvurlariga integratsiya qiling. Muhim xulosalar bo'yicha qurilishlar muvaffaqiyatsiz tugaydi.
- Xavfsizlik Madaniyatini Rivojlantiring: Xavfsiz kodlash amaliyotlari bo'yicha muntazam treninglar o'tkazing. Dasturchilarni himoyalanish haqida o'ylashga undash.
- Qo'lda Auditlarni O'tkazing: Muhim ilovalar uchun avtomatlashtirilgan vositalarni xavfsizlik mutaxassislari tomonidan davriy qo'lda kodlarni ko'rib chiqish va penetratsion sinovlar bilan to'ldiring.
Xavfsizlik - bu loyihaning oxirida qo'shiladigan xususiyat emas; bu uzluksiz jarayon. Auditga proaktiv va qatlamli yondashuvni qabul qilish orqali siz TypeScript-ning to'liq quvvatidan foydalanishingiz va ayni paytda global foydalanuvchilar bazasi uchun xavfsizroq, bardoshli dasturiy ta'minot yaratishingiz mumkin.