
Iron Laws nima?
Iron Laws, shuningdek 오철칙 nomi bilan tanilgan, AI tomonidan yaratilgan loyihalarda ko‘p uchraydigan xavfsizlik va texnik xizmat ko‘rsatish muammolarini aniqlash uchun mo‘ljallangan statik tekshiruv vositasidir. U korporativ va davlat sektori tizim integratsiyasi auditlaridan olingan saboqlarni qo‘llaydi, so‘ng har bir topilmani tushunarli tilda izohlaydi.
Vosita dastur shunchaki ishlash-ishlamasligidan ko‘ra kengroq tekshiruv o‘tkazadi. U kod ichiga qattiq kiritilgan maxfiy ma’lumotlar, xavfsiz bo‘lmagan kiritish ma’lumotlarini qayta ishlash, yutilgan istisnolar, autentifikatsiyasiz ma’muriy API’lar, Supabase yoki Firebase kirish nazoratlarining yo‘qligi, repozitoriyga kiritilgan .env fayllari, takrorlangan funksiyalar, aylana bog‘liqliklar va turlar xavfsizligini chetlab o‘tish kabi muammolarni tekshiradi.
Iron Laws AI kodlash yordamchisiga joylashtirish mumkin bo‘lgan tuzilgan tuzatish ko‘rsatmalarini ham yaratadi. Bu takroran foydalanish mumkin bo‘lgan ish jarayonini hosil qiladi:
AI bilan yarating → iron-laws check → iron-laws fix-prompt
→ AI’dan topilmalarni tuzatishni so‘rang → qayta tekshiring
Iron Laws ishlab chiqish vaqtida foydalaniladigan ko‘rib chiqish yordamchisidir; u rasmiy sertifikatlash mahsuloti yoki ilova xavfsiz ekanining isboti emas. Undan testlar, kod ko‘rib chiqishlari va boshqa xavfsizlik vositalari bilan birga foydalaning.
Asosiy imkoniyatlar
Xavfsizlik va sifat tekshiruvi
Loyiha bir nechta yo‘nalishni qamrab oluvchi 90 ta qoidani o‘z ichiga oladi:
- Ma’lumotnoma qoidalari: Koreya Ichki ishlar va xavfsizlik vazirligining dasturiy ta’minotni ishlab chiqish xavfsizligi bo‘yicha qo‘llanmasida keltirilgan, ishlab chiqish bosqichidagi barcha 49 ta band qamrab olinadi. Bularga inyeksiya, XSS, SSRF, XXE, zaif kriptografiya, sertifikatni tekshirishni o‘chirish, xavfsiz bo‘lmagan deserializatsiya, xatolarni qayta ishlash va xotira xavfsizligi kiradi.
- AI kod tuzatishlari: Qattiq kiritilgan konfiguratsiya, maxfiy ma’lumotlarning zaxira qiymatlari, frontendda maxfiy ma’lumotlarning oshkor bo‘lishi, xavfsiz bo‘lmagan CORS, kirish qoidalarining yo‘qligi, xavfli Docker yoki CI sozlamalari, bog‘liqliklardagi imlo xatolari, versiyasi mahkamlanmagan bog‘liqliklar, maxfiy ma’lumotlarni loglash, IDOR va cookie atributlari tekshiriladi.
- Arxitektura tekshiruvlari: Hajmi haddan tashqari katta funksiyalar va fayllar, qatlamlar o‘rtasidagi noto‘g‘ri bog‘liqliklar, so‘rov qayta ishlovchilaridan ma’lumotlar bazasiga to‘g‘ridan-to‘g‘ri kirish, aylana bog‘liqliklar, takrorlangan funksiyalar, takroriy satr konstantalari va testlarning yo‘qligi tekshiriladi.
- Turlar xavfsizligi tekshiruvlari: TypeScript’dagi
anyva@ts-ignore, Python’dagitype: ignoreva cast’lar, Java’dagi xom turlar, C#’dagidynamichamda qo‘llab-quvvatlanadigan boshqa tillardagi tur tizimini chetlab o‘tish holatlari tekshiriladi.
Tushunarli topilmalar va tuzatish yo‘riqnomasi
Har bir topilma muammoning izohi, nima uchun xavfli ekani va uni qanday tuzatish mumkinligi haqidagi ma’lumotlarni o‘z ichiga oladi. Qoida nashr etilgan qo‘llanmadagi bandga mos kelganda, hisobotda ushbu band raqami va uning CWE mosligi ham ko‘rsatiladi. Loyihaga xos sifat qoidalari tashqi talablar emas, balki Iron Laws qoidalari sifatida aniq belgilanadi.
AI uchun tayyor tuzatish so‘rovlari
fix-prompt buyrug‘i topilmalarni jiddiylik darajasi bo‘yicha tartiblaydi va ularni AI kodlash vositasi uchun ko‘rsatmalarga aylantiradi. So‘rov xatolarni yutib yubormaslik, maxfiy ma’lumotlarni manba kodiga joylashtirmaslik, turlar tekshiruvini chetlab o‘tmaslik va takroriy implementatsiyalar yaratmaslik kabi tamoyillarni ham mustahkamlaydi.
Mahalliy tahlil
Zarur parserlar paket tarkibiga kiritilgan, shuning uchun o‘rnatilgandan keyin tekshiruvlarni tarmoqqa ulanmasdan ham bajarish mumkin.
Tillar va fayllarni qo‘llab-quvvatlash
Qo‘llab-quvvatlash darajasi til va fayl turiga qarab farq qiladi:
- Kengaytirilgan qo‘llab-quvvatlash: Python, JavaScript, TypeScript, Java va C# uchun sintaksis tahlili, kiritish ma’lumotlarini kuzatish va eng keng qoida qamrovi mavjud.
- Asosiy qo‘llab-quvvatlash: Go va PHP uchun sintaksis tahlili hamda muhim inyeksiya, xatolarni qayta ishlash va kriptografiya tekshiruvlari mavjud.
- Cheklangan qo‘llab-quvvatlash: Rust va C/C++ uchun xatolarni qayta ishlash, xotiradan foydalanish, format satrlari, API’lar va turlarni chetlab o‘tish holatlari tekshiriladi.
- Konfiguratsiya va ta’rif fayllari: SQL, YAML, JSON,
.env, Dockerfile, Compose, GitHub Actions, MyBatis XML va HTML shablonlari maxfiy ma’lumotlar, kirish nazorati, deploy va escaping bilan bog‘liq muammolar bo‘yicha tekshiriladi.
Funksiyalar ichida Iron Laws shoxlanishlar, sikllar va istisnolar orqali oqimni tahlil qiladi. U bir fayl ichidagi yordamchi funksiyalar chaqiruvlarini to‘rt darajagacha kuzatadi. Python’da qo‘shimcha ravishda importlar orqali fayllararo kuzatish tajriba tariqasida mavjud, biroq u tahlil cheklovlariga bo‘ysunadi. Boshqa tillardagi fayllararo oqimlar o‘tkazib yuborilishi yoki ko‘rib chiqishni talab qiluvchi holat sifatida qayd etilishi mumkin.
O‘rnatish
Iron Laws uchun Python 3.12 yoki undan yangiroq versiya talab qilinadi. Uni uv yordamida mustaqil vosita sifatida o‘rnatish tavsiya etiladi:
uv tool install git+https://github.com/JinHo-von-Choi/iron-laws.git
Shuningdek, uni pip yordamida o‘rnatishingiz mumkin:
pip install git+https://github.com/JinHo-von-Choi/iron-laws.git
O‘rnatilgandan so‘ng, paketga kiritilgan qoidalar ro‘yxatini chiqarib, buyruq mavjudligini tekshiring:
iron-laws rules
Til va qoida bo‘yicha implementatsiya hamda tekshirilganlik holatini ko‘rish uchun quyidagini ishga tushiring:
iron-laws support
Bu farq muhim, chunki parser mavjudligi ushbu til uchun har bir qoida tekshirilganini anglatmaydi.
Birinchi tekshiruvni ishga tushirish
Joriy loyihani skanerlash
Terminalni loyiha katalogida oching va quyidagini ishga tushiring:
iron-laws check .
Odatiy holatda buyruq HIGH yoki undan yuqori jiddiylik darajasidagi topilmani aniqlasa, xatolik bilan yakunlanadi. Chiqish kodlari:
- 0: Tanlangan jiddiylik siyosati bo‘yicha tekshiruv muvaffaqiyatli o‘tdi.
- 1: Kamida bitta topilma sozlangan muvaffaqiyatsizlik jiddiyligi darajasiga yetdi yoki undan oshdi.
- 2: Kiritish ma’lumotlari yoki konfiguratsiya noto‘g‘ri, hech qanday fayl tekshirilmagan yoki qoida xatolari yoxud faylni o‘qishdagi xatolar kabi muammolar sabab tekshiruv yakunlanmagan.
Tugallanmagan tekshiruv tasdiqlangan baho yoki muvaffaqiyatli natijaga ega bo‘lmaydi. Uning sabablari diagnostics ostida qayd etiladi. Bo‘sh nishon ham --allow-empty parametri aniq ko‘rsatilmaguncha muvaffaqiyatli skanerlash sifatida qaralmaydi.
Alohida qoidani tushunish
Qoidaning oddiy tildagi izohini olish kerak bo‘lsa, explain buyrug‘idan foydalaning:
iron-laws explain IL-501
Shuningdek, havola qilingan 49 ta amalga oshirish bandidan qaysilari qamrab olinganini tekshirishingiz mumkin:
iron-laws coverage
Hisobot yaratish
Havola qilingan barcha 49 ta bandning tekshiruv holatini o‘z ichiga olgan Markdown hisobotini yaratish uchun quyidagini bajaring:
iron-laws audit . --format markdown -o report.md
GitHub Code Scanning yoki boshqa mos tizim uchun SARIF faylini yaratish uchun quyidagidan foydalaning:
iron-laws audit . --format sarif -o iron-laws.sarif
AI kodlash yordamchisi uchun ko‘rsatmalar yaratish
Topilmalarni ko‘rib chiqqach, AI uchun tayyor tuzatish so‘rovini yarating:
iron-laws fix-prompt .
Yaratilgan ko‘rsatmalarni kodlash yordamchingizga joylang, taklif qilingan o‘zgarishlarni ko‘rib chiqing va tekshiruvni qayta ishga tushiring:
iron-laws check .
fix-prompt buyrug‘i topilmalar mavjud bo‘lsa ham 0 chiqish kodini qaytaradi, chunki uning maqsadi ko‘rsatmalar yaratishdir. Undan joylashtirishni nazorat qilish vositasi sifatida foydalanmang. Majburiy tekshiruv uchun check yoki audit buyrug‘idan foydalaning.
Aniqlangan maxfiy qiymatlar hisobotlar va yaratilgan so‘rovlarda **** sifatida yashiriladi. Biroq aniqlanmagan maxfiy ma’lumotlarni avtomatik yashirib bo‘lmaydi, shuning uchun yaratilgan matnni tashqi AI xizmatiga yuborishdan oldin ko‘rib chiqing.
Loyiha siyosatlarini sozlash
Boshlang‘ich konfiguratsiya faylini quyidagi buyruq bilan yarating:
iron-laws init
Loyiha .iron-laws.yml faylidan foydalanadi. Odatdagi konfiguratsiya quyidagicha:
fail_on: HIGH
excludes: [".git", "node_modules", "dist"]
disabled_rules: ["ARC-206"]
limits:
max_function_lines: 80
max_file_lines: 600
max_parameters: 7
max_nesting: 5
duplicate_similarity: 0.9
fail_on sozlamasi CRITICAL, HIGH, MEDIUM yoki LOW qiymatlarini qabul qiladi. Amaldagi ustuvorlik tartibi: --fail-on buyruq qatori parametri, undan keyin konfiguratsiya fayli, so‘ng HIGH standart qiymati. Hisobotlarda faol chegara qiymatini qaysi manba taqdim etgani qayd etiladi.
Standart bo‘yicha Iron Laws tekshirilayotgan katalogdagi konfiguratsiyadan foydalanadi. Muayyan faylni tanlash uchun --config parametridan yoki yuqori kataloglardan izlash uchun --search-parents parametridan foydalaning. Noma’lum kalitlar va noto‘g‘ri sozlamalar jimgina e’tiborsiz qoldirilmaydi; ular 2 chiqish kodini hosil qiladi.
Ataylab qilingan istisnolarni boshqarish
Noto‘g‘ri ijobiy natija yoki ataylab qilingan istisnani faqat sabab ko‘rsatilgan bostirish direktivasi bilan yashirish mumkin. Sababsiz izoh e’tiborga olinmaydi.
Python’da bitta topilmani bostirish uchun:
except ImportError: # iron-laws: ignore[IL-301] Ixtiyoriy bog‘liqlik bu funksiyani o‘chiradi
yaml = None
Butun fayl uchun qoidani bostirish maqsadida dastlabki 30 qator ichiga ignore-file direktivasini joylang:
# iron-laws: ignore-file[IL-102] Andoza ta’riflari ataylab zaif algoritmlarni aniqlaydi
Bostirish direktivalariga tugash sanasini qo‘shish mumkin:
# iron-laws: ignore[IL-101] until=2026-12-31 Hujjatlashtirilgan sababga ega vaqtinchalik istisno
Muddati o‘tgan bostirish direktivalari amal qilishdan to‘xtaydi va hisobotlarda ko‘rsatiladi. Iron Laws foydalanilmagan bostirish direktivalari hamda noma’lum qoida identifikatorlariga havolalar haqida ham hisobot beradi.
Mavjud loyihada Iron Laws’ni joriy etish
Bazaviy holat yaratish
Agar mavjud repozitoriyda allaqachon qabul qilingan topilmalar bo‘lsa, ularni tasdiqlangan texnik qarzdorlik sifatida qayd eting:
iron-laws baseline create .
Keyin saqlangan bazaviy holatga nisbatan faqat yangi kiritilgan topilmalarni baholang:
iron-laws check . --baseline .iron-laws-baseline.json
O‘zgartirilgan fayllarni tekshirish
O‘zgartirilgan fayllarga qaratilgan pull-request fikr-mulohazalari uchun asosiy tarmoq bilan solishtiring:
iron-laws check . --changed-since origin/main
README o‘zgartirilgan fayllarni tekshirishni to‘liq va davriy skanerlash bilan birga qo‘llashni tavsiya qiladi, shunda repozitoriy miqyosidagi muammolar e’tibordan chetda qolmaydi.
Ko‘rib chiqish fikr-mulohazalarini qayd etish
Ko‘rib chiqishni talab qiladigan deb belgilangan topilmalarni tasniflash va ularga ko‘rib chiqish xarajatini biriktirish mumkin:
iron-laws feedback add IL-501 src/a.py:3 --verdict false-positive --minutes 10
AI yaratgan patchlarni tekshirish
Iron Laws AI kodni o‘zgartirgandan keyin nimalar tekshirilgani va nimalar tekshirilmaganiga oid dalillarni saqlash uchun kengaytirilgan ish jarayonini o‘z ichiga oladi.
Dalillar shartnomasini tekshirish
Dalillar shartnomasi yakunlangan skanerlashni zarur dalillarni haqiqatda yaratgan skanerlashdan ajratib turadi:
iron-laws check . --contract .iron-laws-contract.yml
Hal qilinmagan kiritish manbalari avtomatik ravishda toza natijalarga aylantirilmaydi. Amaldagi dalillar shartnomasi qamrovi Python buyruqlarini bajarish, yo‘llarga kirish va SQL yaratish oilalarini o‘z ichiga oladi.
Patch tekshiruvi kvitansiyasini yaratish
Taklif qilingan patchni tekshirish va tekshiruv kvitansiyasini saqlash uchun quyidagiga o‘xshash buyruqni bajaring:
iron-laws verify-patch . --patch fix.diff \
--finding IL-504@app.py:6 \
--runner docker \
--image IMAGE_NAME \
-o receipt.json
Tekshiruvchi asl nusxa va nomzod nusxani bir xil siyosat asosida taqqoslaydi. U o‘chirilgan testlar, qo‘shimcha o‘tkazib yuborishlar, yangi ignore izohlari yoki zaiflashtirilgan siyosatlar kabi shubhali o‘zgarishlar haqida alohida hisobot beradi. Ogohlantirishning yo‘qolishi o‘z-o‘zidan yaroqli tuzatish isboti hisoblanmaydi.
Testlar faqat hisob ma’lumotlarisiz, bir martalik izolyatsiyalangan muhitda ishga tushiriladi. Agar izolyatsiyani ta’minlab bo‘lmasa, Iron Laws testlarni xostda yashirincha bajarmaydi; natijani noaniq deb qoldiradi.
Farqlovchi regressiya testini taklif qilish
Topilma uchun regressiya testi spetsifikatsiyasi nomzodini yaratishingiz mumkin:
iron-laws regression propose . --finding IL-504@app.py -o spec.yml
Ko‘zlangan tekshirish usuli quyidagilarni nazorat qiladi: asl kod nuqson sababli muvaffaqiyatsiz tugaydi, nomzod muvaffaqiyatli o‘tadi va tuzatish bekor qilingan mutant yana muvaffaqiyatsiz tugaydi. README bu ketma-ketlikni uch marta takrorlashni tavsiflaydi. Yaratilgan test tasdiqlanmaguncha taklif bo‘lib qoladi.
Inson tasdig‘ini qayd etish
Tasdiqni uning sababi bilan saqlang:
iron-laws approvals add . \
--finding IL-504@app.py \
--reason "Documented review reason" \
--store approvals.jsonl
Skanerlash vaqtida haqiqiy tasdiqlarni qo‘llang:
iron-laws check . --approvals approvals.jsonl
Tasdiqlar faqat ularning taxminlari o‘z kuchida qolgan paytda haqiqiy hisoblanadi. Chaqiruvchilar, ma’lumotlar oqimi, sanitarizatorlar, kirish doirasi yoki qoida ma’nosidagi o‘zgarishlar qayta ko‘rib chiqishni talab qilishi mumkin. Zaif kodning nusxasi mavjud tasdiqni meros qilib olmaydi.
GitHub Actions bilan integratsiya
Quyidagi workflow Iron Laws’ni o‘rnatadi, SARIF hisobotini yuklaydi va keyin yuqori darajadagi jiddiylik uchun deploy cheklovini qo‘llaydi:
name: Iron Laws
on: [push, pull_request]
jobs:
audit:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v3
- run: uv tool install git+https://github.com/JinHo-von-Choi/iron-laws.git
- run: iron-laws audit . --format sarif -o iron-laws.sarif || true
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: iron-laws.sarif
- run: iron-laws check . --fail-on HIGH
Hisobot yaratish bosqichida || true ishlatiladi, shunda topilmalar mavjud bo‘lsa ham SARIF fayli yuklanishi mumkin. Yakuniy check buyrug‘i haqiqiy muvaffaqiyat yoki muvaffaqiyatsizlik cheklovini ta’minlaydi.
Amaliy cheklovlar
- Toza natija joriy qilingan qoidalar va qo‘llab-quvvatlanadigan tahlil doirasida hech qanday muammo topilmaganini anglatadi. Bu ilovada zaifliklar yo‘qligini isbotlamaydi.
- Fayllararo kiritma kuzatuvi Python uchun tajribaviy, boshqa tillar uchun esa cheklangan. Ayrim oqimlar o‘tkazib yuborilishi yoki qo‘lda ko‘rib chiqishni talab qiluvchi holat sifatida xabar qilinishi mumkin.
- Sanitarizatorlar faqat ular himoya qiladigan kontekst uchun, masalan, HTML, SQL, shell buyruqlari yoki yo‘llar uchun tan olinadi.
- README ma’lumotlariga ko‘ra, patch tekshiruvi, regressiya testi va tasdiqlarni kuzatish hali mustaqil baholash yoki haqiqiy loyihada sinovdan o‘tkazilmagan.
- Loyiha keltirgan OWASP Benchmark natijalari bir nechta toifalarda yaxshilanishlarni ko‘rsatadi, biroq xavfsiz sanitarizatsiya qilingan SQL va buyruq kiritish holatlari kabi noto‘g‘ri ijobiy natijalar saqlanib qolmoqda.
- Paketlar repositоriysiga murojaat qilmasdan, vosita har bir soxta bog‘liqlikni ishonchli aniqlay olmaydi. Buning o‘rniga mashhur paketlarga o‘xshash nomlar haqida xabar beradi.
- Siqilgan va yaratilgan fayllar o‘tkazib yuboriladi, sabablar
skipped_filesostida qayd etiladi.
Batafsil ma’lumot uchun patch tekshiruvi, aniqlik o‘lchovlari, tillar va qoidalarni qo‘llab-quvvatlash hamda hisobot formatlari bo‘yicha repositоriy hujjatlariga murojaat qiling.
Xulosa
Iron Laws sun’iy intellekt yaratgan dasturiy ta’minotni yashirin xavfsizlik va texnik xizmat muammolari ishlab chiqarishdagi hodisalarga aylanmasidan oldin ko‘rib chiqishning tizimli usulini taqdim etadi. iron-laws check . buyrug‘idan boshlang, tushuntirishlarni tekshiring, tuzatish promptini yarating, sun’iy intellekt o‘zgarishlarini ko‘rib chiqing va qayta skanerlang. Loyiha rivojlangani sari jarayonni takrorlanadigan va auditdan o‘tkaziladigan qilish uchun konfiguratsiya, bazaviy holatlar, SARIF hisobotlari, patch kvitansiyalari va inson tasdiqlarini qo‘shing.
Loyiha MIT litsenziyasi ostida mavjud. Uning natijalari testlash, kodni qo‘lda ko‘rib chiqish va kengroq xavfsizlik baholashini almashtirmasdan, ularni qo‘llab-quvvatlashi kerak.
