Ruka hadi maudhui makuu
Mafunzo ya AI

Kagua na Uboreshe Msimbo Uliotengenezwa na AI kwa Iron Laws

Jifunze jinsi ya kusakinisha Iron Laws, kuchanganua mradi, kutengeneza maagizo ya kurekebisha yanayofaa kwa AI, kusanidi viwango vya utekelezaji, kudhibiti misingi na vizuizi, kuthibitisha viraka vya AI, na kuunganisha ripoti za SARIF na GitHub Actions.

Kagua na Uboreshe Msimbo Uliotengenezwa na AI kwa Iron Laws
Nembo ya mradi wa Iron Laws

Iron Laws ni nini?

Iron Laws, pia inajulikana kama 오철칙, ni zana ya ukaguzi tuli iliyoundwa kugundua matatizo ya usalama na udumishaji yanayopatikana mara nyingi katika miradi inayozalishwa na AI. Inatumia mafunzo yaliyotokana na ukaguzi wa ujumuishaji wa mifumo ya biashara na sekta ya umma, kisha inaeleza kila hitilafu kwa lugha inayoeleweka.

Zana hii huangalia zaidi ya ikiwa programu inaendesha tu. Hukagua matatizo kama siri zilizoandikwa moja kwa moja kwenye msimbo, ushughulikiaji usio salama wa ingizo, vighairi vilivyofichwa, API za usimamizi zisizo na uthibitishaji, ukosefu wa vidhibiti vya ufikiaji vya Supabase au Firebase, faili za .env zilizowekwa kwenye hazina, kazi zilizorudiwa, utegemezi wa mzunguko, na njia za kukwepa usalama wa aina.

Iron Laws pia hutengeneza maagizo yaliyopangwa ya kurekebisha, ambayo yanaweza kubandikwa kwenye msaidizi wa usimbaji wa AI. Hii huunda mtiririko wa kazi unaoweza kurudiwa:

Build with AI → iron-laws check → iron-laws fix-prompt
→ ask the AI to fix the findings → run check again

Iron Laws ni msaada wa ukaguzi wakati wa uundaji, si bidhaa rasmi ya uthibitishaji wala ushahidi kwamba programu iko salama. Itumie pamoja na majaribio, ukaguzi wa msimbo, na zana nyingine za usalama.

Vipengele Muhimu

Ukaguzi wa usalama na ubora

Mradi huu una sheria 90 zinazohusu maeneo kadhaa:

  • Sheria za marejeo: Hushughulikia vipengele vyote 49 vya hatua ya utekelezaji kutoka kwenye mwongozo wa usalama wa uundaji wa programu wa Wizara ya Usalama wa Ndani na Usalama ya Korea uliorejelewa, ikiwemo sindikizo, XSS, SSRF, XXE, usimbaji fiche dhaifu, kuzimwa kwa uthibitishaji wa vyeti, usanirishaji usio salama, ushughulikiaji wa hitilafu, na usalama wa kumbukumbu.
  • Marekebisho ya msimbo wa AI: Usanidi ulioandikwa moja kwa moja kwenye msimbo, thamani za siri za akiba, kufichuliwa kwa siri za upande wa mbele, CORS isiyo salama, sheria za ufikiaji zinazokosekana, mipangilio hatari ya Docker au CI, makosa ya kuandika utegemezi, utegemezi usiofungwa kwenye matoleo mahususi, uandishi wa taarifa nyeti kwenye kumbukumbu, IDOR, na sifa za vidakuzi.
  • Ukaguzi wa usanifu: Kazi na faili zenye ukubwa kupita kiasi, utegemezi usiofaa kati ya tabaka, ufikiaji wa moja kwa moja wa hifadhidata kutoka kwa vishughulikiaji vya maombi, utegemezi wa mzunguko, kazi zilizorudiwa, vibambo vya maandishi vya kudumu vilivyorudiwa, na majaribio yaliyokosekana.
  • Ukaguzi wa usalama wa aina: TypeScript any na @ts-ignore, Python type: ignore na ubadilishaji wa aina, aina ghafi za Java, C# dynamic, na njia za kukwepa mfumo wa aina katika lugha nyingine zinazoungwa mkono.

Matokeo yanayoeleweka na mwongozo wa marekebisho

Kila matokeo yanajumuisha maelezo ya tatizo, kwa nini ni hatari, na jinsi linavyoweza kurekebishwa. Pale ambapo sheria inalingana na kipengele cha mwongozo uliochapishwa, ripoti hujumuisha nambari ya kipengele hicho na ramani yake ya CWE. Sheria za ubora mahususi kwa mradi hutambuliwa waziwazi kama sheria za Iron Laws badala ya mahitaji ya nje.

Maagizo ya marekebisho yaliyo tayari kwa AI

Amri ya fix-prompt hupanga matokeo kulingana na ukali na kuyageuza kuwa maagizo kwa zana ya usimbaji ya AI. Agizo hilo pia husisitiza kanuni kama kutoficha hitilafu, kutoweka siri kwenye msimbo wa chanzo, kutokwepa ukaguzi wa aina, na kutounda utekelezaji unaojirudia.

Uchanganuzi wa ndani

Vichanganua vinavyohitajika vimejumuishwa kwenye kifurushi, hivyo ukaguzi unaweza kufanywa bila ufikiaji wa mtandao baada ya usakinishaji.

Usaidizi wa Lugha na Faili

Kiwango cha usaidizi hutofautiana kulingana na lugha na aina ya faili:

  • Usaidizi wa kina: Python, JavaScript, TypeScript, Java, na C# hupokea uchanganuzi wa sintaksia, ufuatiliaji wa ingizo, na ufunikaji mpana zaidi wa sheria.
  • Usaidizi wa msingi: Go na PHP hupokea uchanganuzi wa sintaksia pamoja na ukaguzi muhimu wa sindikizo, ushughulikiaji wa hitilafu, na usimbaji fiche.
  • Usaidizi mdogo: Rust na C/C++ hupokea ukaguzi wa ushughulikiaji wa hitilafu, matumizi ya kumbukumbu, vibambo vya muundo, API, na njia za kukwepa aina.
  • Faili za usanidi na ufafanuzi: SQL, YAML, JSON, .env, Dockerfile, Compose, GitHub Actions, MyBatis XML, na violezo vya HTML hukaguliwa kwa matatizo husika ya siri, vidhibiti vya ufikiaji, uwekaji wa mfumo, na escaping.

Ndani ya kazi, Iron Laws huchanganua mtiririko kupitia matawi, mizunguko, na vighairi. Hufuata miito ya kazi saidizi za faili hiyo hiyo hadi viwango vinne kwa kina. Python pia ina ufuatiliaji wa majaribio wa faili mbalimbali kupitia uingizaji, kwa kuzingatia mipaka ya uchanganuzi. Mitiririko ya faili mbalimbali katika lugha nyingine inaweza kukosekana au kuripotiwa kuwa inahitaji ukaguzi.

Usakinishaji

Iron Laws inahitaji Python 3.12 au mpya zaidi. Kuisakinisha kama zana huru kwa kutumia uv ndiyo njia inayopendekezwa:

uv tool install git+https://github.com/JinHo-von-Choi/iron-laws.git

Vinginevyo, unaweza kuisakinisha kwa pip:

pip install git+https://github.com/JinHo-von-Choi/iron-laws.git

Baada ya usakinishaji, thibitisha kuwa amri inapatikana kwa kuorodhesha sheria zilizojumuishwa:

iron-laws rules

Kuangalia hali ya utekelezaji na uthibitishaji kwa lugha na sheria, endesha:

iron-laws support

Tofauti hii ni muhimu kwa sababu kuwepo kwa kichanganua si lazima kumaanishe kuwa kila sheria imethibitishwa kwa lugha hiyo.

Fanya Ukaguzi Wako wa Kwanza

Changanua mradi wa sasa

Fungua kituo cha amri katika saraka ya mradi na endesha:

iron-laws check .

Kwa chaguo-msingi, amri hushindwa inapopata matokeo yenye ukali wa HIGH au zaidi. Misimbo ya kutoka ni:

  • 0: Ukaguzi umepita chini ya sera ya ukali iliyochaguliwa.
  • 1: Angalau matokeo moja yalifikia au kuzidi ukali uliowekwa wa kushindwa.
  • 2: Ingizo au usanidi haukuwa sahihi, hakuna faili zilizokaguliwa, au ukaguzi haukuweza kukamilika kwa sababu ya matatizo kama hitilafu za sheria au kushindwa kusoma faili.

Ukaguzi ambao haujakamilika haupati daraja lililothibitishwa wala matokeo ya kufaulu. Sababu zake huandikwa chini ya diagnostics. Lengo tupu pia halichukuliwi kuwa uchanganuzi uliofaulu isipokuwa --allow-empty itolewe waziwazi.

Elewa kanuni binafsi

Tumia explain unapohitaji maelezo ya kanuni kwa lugha rahisi:

iron-laws explain IL-501

Pia unaweza kukagua ni vipengee vipi kati ya 49 vya utekelezaji vilivyorejelewa vinavyoshughulikiwa:

iron-laws coverage

Unda ripoti

Kwa ripoti ya Markdown iliyo na hali ya ukaguzi wa vipengee vyote 49 vilivyorejelewa, endesha:

iron-laws audit . --format markdown -o report.md

Ili kuunda faili la SARIF kwa GitHub Code Scanning au mfumo mwingine unaooana, tumia:

iron-laws audit . --format sarif -o iron-laws.sarif

Unda Maelekezo kwa Msaidizi wa Usimbaji wa AI

Baada ya kukagua matokeo, unda ombi la marekebisho lililo tayari kwa AI:

iron-laws fix-prompt .

Bandika maelekezo yaliyoundwa katika msaidizi wako wa usimbaji, kagua mabadiliko yaliyopendekezwa, kisha endesha ukaguzi tena:

iron-laws check .

Amri ya fix-prompt hurejesha msimbo wa kutoka 0 hata wakati kuna matokeo, kwa sababu madhumuni yake ni kuunda maelekezo. Usiitumie kama kizuizi cha upelekaji. Tumia check au audit kwa utekelezaji wa sera.

Thamani za siri zinazotambuliwa hufichwa kama **** katika ripoti na maombi yaliyoundwa. Hata hivyo, siri zisizotambuliwa haziwezi kufichwa kiotomatiki, kwa hiyo kagua maandishi yaliyoundwa kabla ya kuyatuma kwa huduma ya nje ya AI.

Sanidi Sera za Mradi

Unda faili la awali la usanidi kwa:

iron-laws init

Mradi hutumia .iron-laws.yml. Usanidi wa kawaida ni:

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

Mpangilio wa fail_on hukubali CRITICAL, HIGH, MEDIUM, au LOW. Mpangilio bora wa kipaumbele ni chaguo la mstari wa amri --fail-on, kisha faili la usanidi, halafu thamani chaguomsingi ya HIGH. Ripoti huonyesha ni chanzo gani kilichotoa kizingiti kinachotumika.

Kwa chaguo-msingi, Iron Laws hutumia usanidi ulio katika saraka inayokaguliwa. Tumia --config kuchagua faili mahususi au --search-parents kutafuta katika saraka za mzazi. Vifunguo visivyojulikana na mipangilio batili havipuuzwi kimya kimya; husababisha msimbo wa kutoka 2.

Shughulikia Vighairi Vilivyokusudiwa

Matokeo chanya ya uongo au kighairi kilichokusudiwa kinaweza kuzuiwa tu wakati kizuizi hicho kina sababu. Maoni yasiyo na sababu hupuuzwa.

Kuzuia matokeo moja katika Python:

except ImportError:  # iron-laws: ignore[IL-301] Optional dependency disables this feature
    yaml = None

Kuzuia kanuni kwa faili zima, weka agizo la ignore-file ndani ya mistari 30 ya kwanza:

# iron-laws: ignore-file[IL-102] Pattern definitions intentionally identify weak algorithms

Vizuizi vinaweza kujumuisha tarehe ya mwisho wa matumizi:

# iron-laws: ignore[IL-101] until=2026-12-31 Temporary exception with documented reason

Vizuizi vilivyokwisha muda wake huacha kutumika na huonekana katika ripoti. Iron Laws pia huripoti vizuizi visivyotumika na marejeleo ya vitambulisho vya kanuni visivyojulikana.

Tumia Iron Laws katika Mradi Uliopo

Unda msingi

Ikiwa hazina iliyopo tayari ina matokeo yaliyokubaliwa, yaandike kama deni la kiufundi lililoidhinishwa:

iron-laws baseline create .

Kisha tathmini matokeo mapya pekee dhidi ya msingi uliohifadhiwa:

iron-laws check . --baseline .iron-laws-baseline.json

Kagua faili zilizobadilishwa

Kwa maoni ya ombi la kuvuta yanayolenga faili zilizorekebishwa, linganisha na tawi kuu:

iron-laws check . --changed-since origin/main

README inapendekeza kuoanisha ukaguzi wa faili zilizobadilishwa na uchanganuzi kamili na wa mara kwa mara ili kuhakikisha kuwa masuala ya hazina nzima hayapuuzwi.

Rekodi maoni ya ukaguzi

Matokeo yaliyowekwa kuwa yanahitaji ukaguzi yanaweza kuainishwa na kupewa gharama ya ukaguzi:

iron-laws feedback add IL-501 src/a.py:3 --verdict false-positive --minutes 10

Thibitisha Viraka Vilivyoundwa na AI

Iron Laws inajumuisha mtiririko wa juu wa kazi wa kuhifadhi ushahidi kuhusu kilichothibitishwa na kisichothibitishwa baada ya AI kurekebisha msimbo.

Kagua mkataba wa ushahidi

Mkataba wa ushahidi hutofautisha uchanganuzi uliokamilika na uchanganuzi ambao ulitoa ushahidi unaohitajika:

iron-laws check . --contract .iron-laws-contract.yml

Vyanzo vya ingizo visivyotatuliwa havibadilishwi kiotomatiki kuwa matokeo safi. Ufunikaji wa sasa wa mkataba wa ushahidi unajumuisha utekelezaji wa amri za Python, ufikiaji wa njia, na familia za uundaji wa SQL.

Unda stakabadhi ya uthibitishaji wa kiraka

Ili kukagua kiraka kilichopendekezwa na kuhifadhi stakabadhi ya uthibitishaji, endesha amri kama hii:

iron-laws verify-patch . --patch fix.diff \
  --finding IL-504@app.py:6 \
  --runner docker \
  --image IMAGE_NAME \
  -o receipt.json

Kithibitishaji hulinganisha toleo la awali na mgombea kwa kutumia sera ileile. Huripoti kando mabadiliko ya kutiliwa shaka kama vile kufutwa kwa majaribio, kuruka zaidi, maoni mapya ya kupuuza, au sera zilizodhoofishwa. Kutoweka kwa onyo pekee hakuchukuliwi kuwa uthibitisho wa marekebisho halali.

Vipimo huendeshwa tu katika mazingira yaliyotengwa na ya matumizi ya muda bila vitambulisho vya kuingia. Ikiwa utengaji hauwezi kupatikana, Iron Laws haiendeshi vipimo kimya kimya kwenye kompyuta mwenyeji; huacha matokeo yakiwa hayajaamuliwa.

Pendekeza kipimo cha regression kinachotofautisha

Unaweza kutengeneza rasimu ya vipimo vya regression kwa hitilafu iliyopatikana:

iron-laws regression propose . --finding IL-504@app.py -o spec.yml

Mfumo unaokusudiwa wa uthibitishaji hukagua kwamba toleo la awali linashindwa kwa sababu ya hitilafu, toleo la mgombea linafaulu, na mutant ambayo marekebisho yake yameondolewa inashindwa tena. README inaeleza kurudia mfuatano huu mara tatu. Kipimo kilichotengenezwa hubaki kuwa pendekezo hadi kidhibitishwe.

Rekodi idhini ya binadamu

Hifadhi idhini pamoja na sababu yake:

iron-laws approvals add . \
  --finding IL-504@app.py \
  --reason "Documented review reason" \
  --store approvals.jsonl

Tumia idhini halali wakati wa uchanganuzi:

iron-laws check . --approvals approvals.jsonl

Idhini hubaki halali tu wakati dhana zake zinadumu. Mabadiliko kwa wapigaji, mtiririko wa data, visafishaji, upeo wa ufikiaji, au maana ya kanuni yanaweza kuhitaji mapitio mapya. Msimbo hatari uliorudiwa haurithi idhini iliyopo.

Unganisha na GitHub Actions

Workflow ifuatayo husakinisha Iron Laws, hupakia ripoti ya SARIF, kisha hutekeleza kizuizi cha uenezaji cha ukali wa juu:

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

Hatua ya kutengeneza ripoti hutumia || true ili faili la SARIF liweze bado kupakiwa wakati matokeo yapo. Amri ya mwisho ya check ndiyo hutoa kizuizi halisi cha kufaulu au kushindwa.

Vikwazo vya Kivitendo

  • Matokeo safi yanamaanisha kwamba hakuna suala lililopatikana ndani ya kanuni zilizotekelezwa na upeo wa uchanganuzi unaoungwa mkono. Hayathibitishi kwamba programu haina udhaifu wowote.
  • Ufuatiliaji wa ingizo kati ya faili ni wa majaribio kwa Python na una mipaka kwa lugha nyingine. Baadhi ya mtiririko unaweza kukosekana au kuripotiwa kuwa unahitaji mapitio ya mikono.
  • Visafishaji hutambuliwa tu kwa muktadha unaolindwa navyo, kama vile HTML, SQL, amri za shell, au njia.
  • Uthibitishaji wa patch, upimaji wa regression, na ufuatiliaji wa idhini bado haujapata tathmini huru au majaribio ya matumizi halisi kulingana na README.
  • Matokeo ya OWASP Benchmark yaliyonukuliwa na mradi yanaonyesha maboresho katika kategoria kadhaa, lakini matokeo chanya ya uongo bado yapo, yakiwemo visa vya SQL vilivyosafishwa kwa usalama na vya udungaji wa amri.
  • Bila kuwasiliana na hazina ya vifurushi, zana haiwezi kutambua kwa kutegemewa kila utegemezi uliobuniwa. Badala yake huripoti majina yanayofanana na vifurushi maarufu.
  • Faili zilizobanwa na zilizotengenezwa hurukwa, huku sababu zikiwekwa chini ya skipped_files.

Kwa maelezo zaidi, soma nyaraka za hazina kuhusu uthibitishaji wa patch, vipimo vya usahihi, usaidizi wa lugha na kanuni, na miundo ya ripoti.

Hitimisho

Iron Laws hutoa njia iliyopangwa ya kukagua programu inayozalishwa na AI kabla ya matatizo yaliyofichika ya usalama na udumishaji kuwa matukio ya uzalishaji. Anza na iron-laws check ., kagua maelezo, tengeneza kidokezo cha marekebisho, kagua mabadiliko ya AI, kisha changanua tena. Mradi unavyoendelea kukomaa, ongeza usanidi, misingi ya ulinganisho, ripoti za SARIF, stakabadhi za patch, na idhini za binadamu ili kufanya mchakato uwe wa kurudiwa na kukaguliwa.

Mradi unapatikana chini ya Leseni ya MIT. Matokeo yake yanapaswa kusaidia, wala si kuchukua nafasi ya, upimaji, mapitio ya msimbo kwa mikono, na tathmini pana ya usalama.