BCheck ta'riflari ma'lumotnomasi
Ushbu sahifada BCheck yozishda foydalanish mumkin bo'lgan kalit so'zlar batafsil keltirilgan. Majburiy xususiyatlar yulduzcha (*) bilan belgilangan.
Ushbu sahifada
Metadata
Tekshiruvning o'zi haqidagi ma'lumotni o'z ichiga oladi. metadata obyekti barcha BCheck'lar uchun majburiy va ta'rifning eng boshiga joylashtirilishi shart.
metadata
| Xususiyat | Tavsif | Tur |
|---|---|---|
language* | Foydalanilayotgan BCheck ta'rif tilining versiyasi. | enum [v2-beta] |
name* | BCheck'ning nomi. Tekshiruv muammo haqida xabar berganda u Burp Suite interfeysida ko'rsatiladi. | String |
description | BCheck'ning tavsifi. | String |
author | Muallifning ismi. | String |
tags | Identifikatsiya qiluvchi teglar. | List of strings |
Boshqaruv oqimi
Ushbu kalit so'zlar ta'rifning bajarilish oqimini boshqaradi.
run for each
Ustidan iteratsiya qilish mumkin bo'lgan massiv o'zgaruvchisini e'lon qiladi. O'zgaruvchi chaqirilganda tekshiruv massivdagi har bir element uchun bir marta ishga tushadi. E'lon qilingan o'zgaruvchi tashqi ko'rinish sohasiga (outer scope) ega.
run for each kalit so'zi ixtiyoriy. Agar undan foydalansangiz, uni ta'rifingizdagi given...then operatoridan oldin joylashtirishingiz shart.
Misol
Namunada uchta URL sanab o'tilgan url_array nomli o'zgaruvchi e'lon qilinadi. Bu bir xil testni bir nechta URL'ga qarshi ishga tushirishi kerak bo'lgan tekshiruv yozayotgan bo'lsangiz foydali bo'lishi mumkin (masalan, CORS noto'g'ri konfiguratsiyasi tekshiruvida har birini navbatma-navbat Origin sarlavhasi sifatida qo'shish).
define
Ichki ko'rinish sohasiga (inner scope) ega o'zgaruvchilarni e'lon qiladi. define kalit so'zi ixtiyoriy. Agar undan foydalansangiz, uni ta'rifingizdagi given...then operatoridan oldin joylashtirishingiz shart.
Misol
Namunada yangi Burp Collaborator manzilini yaratish uchun generate_collaborator_address() funksiyasi chaqiriladi va u collaborator_address nomli o'zgaruvchida saqlanadi.
given...then
Audit qilinayotgan kontentga asoslanib, tekshiruv qachon ishga tushishini belgilaydi.
Har bir BCheck quyidagilarni o'z ichiga olgan bitta given / then operatoriga ega bo'lishi shart:
YOKI quyidagilardan biri:
given response then- tekshiruv audit qilinadigan har bir javob uchun bir marta ishga tushadi.given request then- tekshiruv audit qilinadigan har bir so'rov uchun bir marta ishga tushadi.given host then- tekshiruv audit qilinadigan har bir host uchun bir marta ishga tushadi.given path then- tekshiruv audit qilinadigan har bir noyob yo'l (path) uchun bir marta ishga tushadi.
YOKI quyidagi insertion point kalit so'zlaridan biri:
given any insertion point then- tekshiruv audit qilinadigan har bir insertion point (har qanday turdagi) uchun bir marta ishga tushadi. Agar siz insertion point turini ko'rsatmasangiz (ya'nigiven insertion pointdan foydalansangiz), Burp Scanner ham shu sukut bo'yicha variantdan foydalanadi.given query insertion point then- tekshiruv audit qilinadigan har bir query uchun bir marta ishga tushadi.given header insertion point then- tekshiruv audit qilinadigan har bir sarlavha (header) uchun bir marta ishga tushadi.given body insertion point then- tekshiruv audit qilinadigan har bir body kontenti uchun bir marta ishga tushadi.given cookie insertion point then- tekshiruv audit qilinadigan har bir cookie uchun bir marta ishga tushadi.
Insertion point'larni birlashtirish uchun or kalit so'zidan foydalanishingiz mumkin. Masalan:
given query or body insertion pointthen - tekshiruv audit qilinadigan har bir query yoki body kontenti uchun bir marta ishga tushadi.given header or cookie insertion point then- tekshiruv audit qilinadigan har bir sarlavha yoki cookie uchun bir marta ishga tushadi.
Shartli operatorlar
Ushbu kalit so'zlar belgilangan shart natijasida sodir bo'ladigan amallarni boshqaradi. Shartli kalit so'zlardan faqat given...then operatori ichida foydalanishingiz mumkin.
if... then
Belgilangan shart bajarilsa, amalni bajaradi. Quyidagilar talab qilinadi:
- Shart.
- Amal.
end ifkalit so'zi.
Misol
Agar oxirgi javobda Apache Struts versiya raqami mavjud bo'lsa, muammo haqida xabar bering:
else if... then
if operatori ichida ishlatiladi. Agar oldingi shart noto'g'ri va else if sharti to'g'ri bo'lsa, amalni bajaradi. Bitta BCheck ichida bir nechta else if operatoridan foydalanishingiz mumkin.
Misol
Agar tekshiruv natijasida Collaborator DNS o'zaro aloqalarini qabul qilsa, muammo haqida firm ishonch darajasi bilan xabar bering. Aks holda, Collaborator biror SMTP o'zaro aloqasini qabul qilgan-qilmaganini tekshiring. Agar qabul qilgan bo'lsa, muammo haqida tentative ishonch darajasi bilan xabar bering.
else then
if operatori ichida ishlatiladi. Agar operatorning sharti va undan oldingi barcha else / if operatorlarining sharti bajarilmasa, amalni bajaradi.
Misol
Agar oxirgi javob bazaviy javob bilan aynan bir xil bo'lmasa-yu, ammo HTTP status kodi bir xil bo'lsa, muammo haqida firm ishonch darajasi bilan xabar bering. Aks holda, muammo haqida tentative ishonch darajasi bilan xabar bering.
end if
if operatorining oxirini bildiradi.
Shartlar
if operatorlarida quyidagi shartlardan foydalanishingiz mumkin:
{X} matches "[regex]"- agar X berilgan regex'ga mos kelsa, to'g'ri (true).{X} differs from {Y}- agar X javobi Y javobidan farq qilsa, to'g'ri.{X} in {Y}- agar Y tarkibida X bo'lsa, to'g'ri (masalan, Y javob bo'lishi, X esa o'sha javob ichida qidiriladigan sarlavha bo'lishi mumkin).{X} is {Y}- agar berilgan parametrlar bir xil bo'lsa, to'g'ri.any interactions- agar Burp Collaborator biror o'zaro aloqani qabul qilgan bo'lsa, to'g'ri.dns interactions- agar Burp Collaborator biror DNS o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.http interactions- agar Burp Collaborator biror HTTP o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.smtp interactions- agar Burp Collaborator biror SMTP o'zaro aloqasini qabul qilgan bo'lsa, to'g'ri.
Shuningdek, shartlarni birlashtirishingiz va o'zgartirishingiz mumkin:
{condition} and {condition}- agar ikkala shart ham to'g'ri bo'lsa, to'g'ri.{condition} or {condition}- agar shartlardan biri yoki ikkalasi to'g'ri bo'lsa, to'g'ri.not({condition})- agar shart to'g'ri bo'lmasa, to'g'ri.
Qavslar
Tekshiruvlaringizdagi mantiq oqimini aniqlashtirish uchun shartlarda qavslardan foydalanishingiz mumkin.
Masalan, A or B and C quyidagi shartlardan biri bajarilganda to'g'ri qiymat beradigan shartni yaratadi:
Ato'g'ri.Bham,Cham to'g'ri.
Biroq (A or B) and C quyidagi shartlarning ikkalasi ham bajarilganda to'g'ri qiymat beradigan shartni yaratadi:
AyokiBto'g'ri.Cto'g'ri.
Amallar
Ushbu kalit so'zlar Burp Scanner'ni muayyan amalni bajarishga undaydi.
Eslatma
Ushbu kalit so'zlarning ba'zilari faqat muayyan insertion point'lar bilan birgalikda ishlatilishi mumkin. Tekshiruv mantig'i qaysi insertion point'larda qo'llanilishini belgilash haqida batafsil ma'lumot olish uchun given...then bo'limiga qarang.
send request
Ko'rsatilgan ma'lumotni o'z ichiga olgan so'rovni yuboradi. given response dan tashqari barcha skanerlash tekshiruvi rejimlari bilan ishlatilishi mumkin.
Eslatma
Agar amal kalit so'zi berilmasa, barcha so'rov xususiyatlari sukut bo'yicha replacing qiymatini oladi. Masalan: bu quyidagi bilan bir xil
| Kalit so'z | Tavsif | Misol |
|---|---|---|
called (satr) | So'rovga nom beradi, shunda unga tekshiruvning keyingi qismlarida murojaat qilish mumkin bo'ladi | "Example request" |
appending headers: (1-n ta name:value juftligi) | Ko'rsatilgan sarlavha(lar)ni so'rovga qo'shadi. Agar so'rovda xuddi shu nomdagi sarlavha allaqachon mavjud bo'lsa, yangi qiymatga ega ikkinchi sarlavha qo'shiladi. Bir nechta sarlavha / qiymat juftligini sanab o'tishingiz mumkin | "Origin": "http://example.com" |
replacing headers: (1-n ta name:value juftligi) | Ko'rsatilgan sarlavha(lar) qiymatini yangi qiymat bilan almashtiradi. Agar ko'rsatilgan nomdagi sarlavhalar bo'lmasa, yangi sarlavha qo'shiladi. Bir nechta sarlavha / qiymat juftligini sanab o'tishingiz mumkin | "Origin": "http://example.com" |
removing headers: (1-n ta sarlavha nomi) | Ko'rsatilgan sarlavha(lar)ni so'rovdan olib tashlaydi. Bir nechta sarlavha nomini sanab o'tishingiz mumkin | "Origin" |
appending queries: (1-n ta query nomi va qiymati) | Ko'rsatilgan query parametr(lar)ini so'rov URL'iga qo'shadi. Agar so'rovda xuddi shu nomdagi query allaqachon mavjud bo'lsa, yangi qiymatga ega ikkinchi sarlavha qo'shiladi. Bir nechta parametrni sanab o'tishingiz mumkin | "title=example_query" |
replacing queries: (1-n ta query nomi va qiymati) | Ko'rsatilgan query parametr(lar)i qiymatini yangi qiymat bilan almashtiradi. Agar ko'rsatilgan nomdagi query'lar bo'lmasa, yangi query qo'shiladi. Bir nechta parametrni sanab o'tishingiz mumkin | "title=example_query" |
removing queries: (1-n ta query nomi) | Ko'rsatilgan query parametr(lar)i qiymatini so'rovdan olib tashlaydi. Bir nechta parametrni sanab o'tishingiz mumkin | "title" |
appending query_string: (satr) | Ko'rsatilgan query satrini mavjud query'ga qo'shadi. Agar mavjud query bo'lmasa, query satrini so'rovga qo'shadi | "title=value&example_title=example_value" |
replacing query_string: (satr) | Butun query satrini ko'rsatilgan qiymat bilan almashtiradi | "example_title=example_query" |
removing query_string: | Query satrini so'rovdan olib tashlaydi | |
appending path: (satr) | Ko'rsatilgan path parametr(lar)ini so'rov URL'iga qo'shadi | "/admin" |
replacing path: (satr) | URL'dagi path parametrlarini ko'rsatilgan qiymatlar bilan almashtiradi. Barcha query parametrlari saqlanib qoladi | "/admin" |
removing path | Barcha path parametrlarini so'rovdan olib tashlaydi. | |
appending method: (satr) | Ko'rsatilgan HTTP metodini so'rovga qo'shadi | "GET" |
replacing method: (satr) | So'rov metodini ko'rsatilgan qiymat bilan almashtiradi | "GET" |
removing method | So'rov metodini olib tashlaydi | |
appending body: (satr) | Ko'rsatilgan body kontentini so'rovga qo'shadi | "body content" |
replacing body: (satr) | So'rov body'sini ko'rsatilgan kontent bilan almashtiradi | "body content" |
removing body | So'rov body'sini olib tashlaydi |
send request (raw)
Ko'rsatilgan ma'lumotni o'z ichiga olgan so'rovni xom (raw) HTTP so'rovi sifatida yuboradi. given response dan tashqari barcha skanerlash tekshiruvi rejimlari bilan ishlatilishi mumkin.
send payload
Ko'rsatilgan payload qo'shilgan yoki almashtirilgan yangi so'rovni yuboradi. Faqat given insertion point bilan ishlatilishi mumkin.
| Xususiyat | Tavsif | Tur |
|---|---|---|
appending: | Ko'rsatilgan payload'ni so'rovning payload to'plamiga qo'shadi. | satr / o'zgaruvchi |
replacing: | So'rovning mavjud payload to'plamini ko'rsatilgan payload bilan almashtiradi. | satr / o'zgaruvchi |
report issue
Burp Scanner'ni muammo haqida xabar berishga majbur qiladi. Bu BCheck'ni tugatadi, hatto tekshiruvning hali ishga tushmagan qismlari bo'lsa ham.
Masalan, quyidagi BCheck'ni ko'rib chiqing:
Bu tekshiruv o'zining Burp Collaborator payload'i natijasida yuzaga kelgan avval DNS, keyin esa HTTP o'zaro aloqalarini qidiradi. Biroq, agar tekshiruv DNS o'zaro aloqasini topsa, u birinchi report issue amalini bajaradi va HTTP o'zaro aloqalari mavjud bo'lsa ham, ular haqida keyinchalik xabar bermaydi.
report issue and continue
Burp Scanner'ni muammo haqida xabar berishga, so'ngra BCheck'ni ishga tushirishda davom etishga majbur qiladi. Masalan, quyidagi BCheck'ni ko'rib chiqing:
Bu tekshiruv o'zining Burp Collaborator payload'i natijasida yuzaga kelgan avval DNS, keyin esa HTTP o'zaro aloqalarini qidiradi. Agar tekshiruv DNS o'zaro aloqasini topsa, u birinchi report issue amalini bajaradi. So'ngra u tekshiruvni davom ettiradi va keyingi barcha HTTP o'zaro aloqalari haqida xabar beradi.
Muammolar haqida xabar berish
BCheck'larda muammolar haqida report issue yoki report issue and continue kalit so'zlari yordamida xabar berishingiz mumkin. Bu kalit so'z bloklarining ikkalasi ham bir xil xususiyatlarga ega.
Eslatma
Quyidagi barcha xususiyatlardan ko'rsatilgan tartibda foydalanishingiz shart. Agar tartibni o'zgartirishga urinsangiz (masalan, name xususiyatini severity xususiyatidan keyin ishlatsangiz), BCheck'ingiz validatsiyadan o'tmaydi.
| Xususiyat | Tavsif | Tur |
|---|---|---|
name | Muammoning nomi. | Satr |
severity* | Muammoning jiddiylik darajasi | [info|low|medium|high] |
confidence* | Muammo mavjudligiga ishonch darajasi | [certain|firm|tentative] |
remediation | Bartaraf etish bo'yicha maslahat | Satr |
detail | Muammo haqida qo'shimcha ma'lumot | Satr |
Muammolarni nomlash
BCheck'lar xabar qilgan barcha muammolar Declarative Scan Check Generated muammo turiga ega. Muammoning nomi quyidagicha aniqlanadi:
- Agar tegishli
report issueyokireport issue and continueblokidanamekalit so'zi bo'lsa, Burp'da muammo nomi sifatida shu qiymat ko'rsatiladi. - Agar tegishli
report issueyokireport issue and continueblokidanamekalit so'zi bo'lmasa, muammo nomi BCheck'ning name metadata xususiyatidan olinadi.
report issue blokiga name kalit so'zini qo'shish muayyan holatlarda muammo haqida xabar berishda ishlatiladigan nomni bekor qilish imkonini beradi. Bu bitta BCheck'dan turli xil muammo turlari haqida xabar berishda foydali. Masalan, sizda o'xshash xatoliklarning bir necha xil variantlari haqida xabar bera oladigan yagona BCheck bo'lishi mumkin.
Muammolarni birlashtirish
Birlashtirish (consolidation) — bu Burp interfeysdagi ortiqcha shovqinni kamaytirish uchun takrorlanuvchi muammolarni jamlaydigan jarayon.
Agar quyidagi ikkala shart ham to'g'ri bo'lsa, Burp BCheck'lar qaytargan muammolarga o'zining odatdagi birlashtirish qoidalarini qo'llaydi:
- Ikkala muammo ham bitta BCheck tomonidan xabar qilingan.
- Ikkala muammo bir xil nomga ega, bu nom metadata'dan olinganmi yoki
report issueblokidagi parametrdan olinganmi — ahamiyati yo'q.
Zaxiralangan o'zgaruvchilar
Ushbu kalit so'zlar muayyan so'rov yoki javob xususiyatlariga ishora qiladi.
Eslatma
O'z o'zgaruvchilaringizni nomlashda ushbu zaxiralangan xususiyat nomlaridan foydalanmasligingizga ishonch hosil qiling, aks holda BCheck ishga tushganda xatolik yuz beradi.
request / response
Ushbu kalit so'zlar muayyan so'rov yoki javob xususiyatlariga ishora qiladi. Siz quyidagilarga murojaat qilishingiz mumkin:
base- crawl davomida ko'rsatilgan skanerlash rejimi uchun Burp Scanner yuborgan so'rov va qabul qilgan javob.latest- ushbu skanerlash rejimi uchun eng so'nggi so'rov / javob juftligi.{request_name}- called kalit so'zi yordamida nomlangan muayyan so'rov / javob juftligi.
Javob
| Xususiyat | Tavsif |
|---|---|
response | Javobning butun mazmunini qaytaradi. |
response.status_code | Javobning HTTP status kodini qaytaradi. |
response.headers | Javob sarlavhalarining ro'yxatini qaytaradi. |
response.body | Javobning body kontentini qaytaradi. |
response.http_version | Javobda ishlatilgan HTTP versiyasini qaytaradi. |
So'rov
| Xususiyat | Tavsif |
|---|---|
request | So'rovning butun mazmunini qaytaradi. |
request.method | So'rovda ishlatilgan HTTP metodini qaytaradi. Masalan: GET |
request.url | So'rov yuborilgan URL'ni qaytaradi. Masalan: https://ginandjuice.shop:443/catalog/product?productId=1 |
request.url.protocol | So'rov URL'ining protokolini qaytaradi. Masalan: https |
request.url.host | So'rov yuborilgan hostni qaytaradi. Masalan: ginandjuice.shop |
request.url.port | So'rov yuborilgan portni qaytaradi. Masalan: 443 |
request.url.path | So'rov URL'ining yo'lini (path) qaytaradi. Masalan: /catalog/product |
request.url.file | URL faylini (URL'ning birinchi qiya chiziqdan keyingi qismini) qaytaradi. Masalan: /catalog/product?productId=1 |
request.url.query | So'rov URL'ida ishlatilgan query satrini qaytaradi. Masalan: productId=1 |
request.http_version | So'rovda ishlatilgan HTTP versiyasini qaytaradi. Masalan: HTTP/2 |
request.headers | So'rov sarlavhalarining ro'yxatini qaytaradi. |
request.body | So'rovning body kontentini qaytaradi. |
user_agent
Burp'ning user agent'ini qaytaradi.
insertion_point_base_value
Ko'rsatilgan insertion point'ning bazaviy qiymatini qaytaradi.
Eslatma
insertion_point_base_value o'zgaruvchisi insertion point boshqaruv oqimi kalit so'zi bilan birga ishlatilishi shart.
Funksiyalar
Ushbu kalit so'zlar chaqirilganda muayyan vazifani bajaradi.
E'tibor bering, barcha BCheck funksiyalari jingalak qavslar {} bilan belgilanadi.
random_str
{random_str(int)}
Ko'rsatilgan uzunlikdagi tasodifiy satrni qaytaradi. Uzunlik 0 va 9,999,999 orasida bo'lishi kerak. 0 kiritilsa, bo'sh satr qaytariladi.
Misol
{random_str(13)} // "qpald95nbjkig"
regex_replace
regex_replace (String source, String regex, String replacement)
Manba satrni oladi va ko'rsatilgan regex shabloniga mos keluvchi har qanday kontentni almashtiruvchi satr bilan almashtiradi.
Misol
regex_replace ({var}, "[a-z]*@", "abc@") Ushbu namunada {var} qiymati "xyz@portswigger.net" deb faraz qiling. Regex shabloni elektron pochta manzilining birinchi qismiga mos keladi va uni almashtiruvchi satr bilan almashtirib, yakuniy natija sifatida abc@portswigger.net ni hosil qiladi.
to_lower
{to_lower(string)}
Ko'rsatilgan satrni kichik harflarga o'giradi.
Misol
{to_lower("Carlos MONTOYA")} // carlos montoya
to_upper
{to_upper(string)}
Ko'rsatilgan satrni katta harflarga o'giradi.
Misol
{to_lower("Peter weiner")} // PETER WEINER
base64_encode
{base64_encode(string)}
Ko'rsatilgan satrni base64 bilan kodlaydi.
Misol
hello world // aGVsbG8gd29ybGQ=
base64_decode
{base64_decode(string)}
Ko'rsatilgan satrni base64'dan dekodlaydi.
Misol
hello world // aGVsbG8gd29ybGQ=
generate_collaborator_address
{generate_collaborator_address}
So'rov ichida foydalanish uchun yangi Burp Collaborator manzilini yaratadi. {generate_collaborator_address} ni bir necha marta chaqirib, bitta BCheck ichida bir nechta manzil yaratishingiz mumkin.
SHA1
sha1(String)
Berilgan kiritmani SHA1 hash funksiyasi yordamida hash qiladi.
Misol
sha1("Hello") // aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA256
sha256(String)
Berilgan kiritmani SHA256 hash funksiyasi yordamida hash qiladi.
Misol
sha256("Hello") // 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
MD5
md5(String)
Berilgan kiritmani MD5 hash funksiyasi yordamida hash qiladi.
Misol
MD5("Hello") // 5d41402abc4b2a76b9719d911017c592
Funksiyalarni birlashtirish
Zarur bo'lsa, bu funksiyalarni bir-birining ichiga joylashtirish mumkin. Masalan, quyidagi funksiya o'zgaruvchini kichik harflarga o'giradi va so'ngra uni bitta amalda base64 sifatida kodlaydi:
{base64_encode(to_lower(my_variable))}
Eslatma
O'zgaruvchilarni nomlashda ushbu funksiya nomlaridan foydalanmasligingizga ishonch hosil qiling, aks holda BCheck ishga tushganda xatolik yuz beradi.
Turli ma'lumotlar
Satrlar
Interpolyatsiya qilinadigan va literal satrlarning ikkalasi ham qabul qilinadi:
- Literal satrlarni belgilash uchun qo'shtirnoqlardan (
"") foydalaning -"delete carlos" - Interpolyatsiya qilinadigan satrlarni belgilash uchun teskari apostroflardan (```
) foydalaning -https://{random_str(5)}.com`
Ko'p qatorli satrlarni qayta ishlaganda Burp Scanner qator oxirlarini \r\n bilan almashtiradi va har bir qatordagi boshidagi hamda oxiridagi bo'shliqlarni olib tashlaydi (ochuvchi qo'shtirnoqdan keyin va yopuvchi qo'shtirnoqdan oldin turgan bo'shliqlar bundan mustasno).
Masalan:
quyidagiga aylanadi
Interpolyatsiya qilinadigan satrlarda boshidagi/oxiridagi bo'shliqlarni aniq ko'rsatish uchun uning o'rniga \s belgisidan foydalaning.
Belgilarni ekranlash
Satrlar ichida belgilarni ekranlash uchun \ belgisidan foydalaning.
Masalan, \{var} ekranlangan, {var} esa var qiymatini chiqaradi.
Regex
BCheck'lar Java uslubidagi regex'ni qo'llab-quvvatlaydi.
"2[0-9][0-9]"
Izohlar
Izoh qatorlarini belgilash uchun # dan foydalaning.
#Hello
Maxsus belgilar
Bu belgilardan interpolyatsiya qilinadigan satrning bir qismi sifatida foydalanish mumkin. Masalan, '\s' bo'shliq sifatida talqin qilinadi, literal satr "\s" esa ikkita alohida belgi sifatida talqin qilinadi.
\n- yangi qator\r- karetkani qaytarish\s- bo'shliq\t- tabulyatsiya\b- backspace\f- sahifani o'tkazish (form feed)
BCheck tuzilishi
Yaroqli BCheck'lar yaratish uchun quyidagi tuzilma qoidalariga amal qilishingiz kerak:
- Har bir ta'rif
metadataobyekti bilan boshlanishi shart. - Har bir ta'rifda aynan bitta
given... thenoperatori bo'lishi shart. - Shartli operatorlar faqat
given... thenoperatori ichida kelishi mumkin. - Ishlatilgan har qanday
defineyokirun for eachoperatorimetadatablokidan keyin, lekingiven... thenoperatoridan oldin joylashtirilishi shart. run for eachyordamida e'lon qilingan o'zgaruvchilar tashqi ko'rinish sohasiga, define yordamida e'lon qilinganlari esa ichki ko'rinish sohasiga ega. Ya'ni,defineorqali e'lon qilingan o'zgaruvchidan keyingirun for eachoperatorida foydalana olmaysiz.