Heatrail

Peatükk 09

Miks võrku ei saa loetleda

Esimene osaline, kellel on päris põhjus jagatud pettusesignaali rünnata, ei ole pettur. Ta on liige: pood kehtiva võtmega, õigel ajal makstud arve ja küsimus kellegi teise klientide kohta. Võti annab juba õiguse päringuid saata, seega on küsimus ühe päringu kaugusel. See artikkel räägib, miks see päring talle ei vasta.

Omadus

Iga kontroll on seotud päris tellimuse või sessiooni viitega, seega ei saa API-d kasutada otsinguvahendina. Vastused on kategooriad poe ees oleva tellimuse kohta, mitte kunagi kirjed. Ainus hulgierand on üks ajaloo skann Pro poe kohta, kuni 250 000 rida, ja see on allpool kirjas. Päring millegi kohta, mis kuulub teisele poele, vastatakse nii, nagu teda ei oleks.

Miks see kehtib

Esimesel ründajal on kehtiv võti

Jagatud võrgu ohumudel kipub algama perimeetrist, kellegagi väljast, kes püüab sisse saada. Huvitav rünne ei ole seal. Igaüks, kes selle API-ni jõuab, hoiab volitust, mille me andsime ettevõttele, kelle me kinnitasime, ja üks asjadest, mida selline liige võib tahta, on päris rünne: kõndida identifikaatorite ruumis, lugeda, mis tagasi tuleb, ja rekonstrueerida iga teise poe pettuseajalugu võrgustikus. Me nimetame teda realistlikuks esimeseks ründeks oma ohumudelis turvalehel, sest jagatud signaal, mis vastab identifikaatorite kohta küsimustele, on signaal, mida saab sõeluda.

Vastus sellele ei ole avastamine. Esimesed neli vastust on liidese kuju ise, sest päringu vormingu omadus hoiab, kas keegi vaatab või mitte.

Kontroll on millegi kohta, mis juhtus

Kontroll peab kandma päris tellimuse viidet või päris sessiooni viidet. Vähemalt üks peab olema, ja päringust, millel kumbagi ei ole, ei saa kunagi kontrolli: ta ebaõnnestub valideerimisel, enne kui midagi otsitakse, ja midagi tema kohta ei kirjutata. See üks nõue muudab, mida päring tähendab. Ta muudab „palun otsi see üles” lauseks „see juhtus minu kassas, ja teilt saab selle kohta küsida”.

Tellimuse viide ei ole kaunistus payloadil. Ta osutab saatja enda tellimuste tabelisse, ja saatjalt saab küsida tellimust, seega sondimine lakkab olemast tasuta küsimus ja saab väiteks sondija enda äri kohta. Viidete voog, millele keegi tellimust toota ei saa, ei ole päringulogi. See on lause poe kohta, kes ta saatis.

Kategooriad, mitte kirjed

Mis tagasi tuleb, kirjeldab poe ees olevat tellimust. See on skoor, hulk põhjuseid, kirjutatud sellele, kes seda tellimust käsitleb, ja läbipaistmatu alias sellele, millega kontroll vastas. Mida ta kunagi ei sisalda, on teise poe tõend: identifikaatorit mitte, räsi mitte, kellegi teise tellimuse viidet mitte, poe nime, kes sildi pani, mitte.

See teeb mahu kasutuks, mitte ainult kalliks. Sõelumine töötab, kui iga tera kannab natuke sellest, mida te otsite, nii et piisavalt terasid kuhjub pildiks. Siin kannab iga tera otsust küsija enda tellimuse kohta ja mitte fragmenti kellegi teise omast, seega tuhat neist koondub tuhandeks otsuseks küsija enda tellimuste kohta.

Joonis 1

Kaks päringut ühe ukse ees. Ilma tellimuse viiteta päringust keeldutakse. Viitega päring saab kategooria, mitte kirje.Vasakul on kaks päringukasti. Ülemine kast on check, mis ei kanna ei tellimuse ega seansi viidet. Pidev nool viib ta keskel olevasse kõrgesse kasti nimega Üks uks, POST kaldkriips v1 kaldkriips check, ja katkendlik nool toob ta kohe tagasi. Ülemise kasti all olev märkus ütleb 422 invalid_payload, keeldutakse, ja midagi ei salvestata. Alumine kast on check, mis kannab toimunud kassa tellimuse viidet. Pidev nool viib ta samast uksest sisse ja pidev nool kannab vastuse paremale välja. Paremal seisab kaks kaarti. Esimene on joonistatud pidevalt, kannab märget tagastatakse, pealkirja Kategooria ning loetleb skoori, selle tellimuse põhjused ja jälje aliase, mis on teie oma. Teine on joonistatud katkendlikult, kannab märget ei tagastata kunagi ja pealkirja Kirje, mis on läbi kriipsutatud, ning loetleb teise poe tellimuse, tunnused ja tõendiread. Alumine rida ütleb, et selle ukse kaudu maksab ülevaade ühe päris kassa iga vastuse kohta, ja et üks ajaloo skann poe kohta on piiratud 250 000 reaga.Checkorder_ref: puudubsession_ref: puudub422 invalid_payloadkeeldutakse, midagi ei salvestataCheckorder_ref: ord-10241tellimus, mis päriselt toimusÜks uksPOST /v1/checküks ankurdatudküsimus korragaloendit ega vahemikkuega eksportitagastatakseKategooriaskoorselle tellimusepõhjusedjälje alias,mis on teie omaei tagastata kunagiKirjeteise poetellimustunnusedtõendireadSiin maksab ülevaade ühe päris kassa iga vastuse kohta. Üks ajaloo skann on piiratud 250 000 reaga.
Kontroll ilma tellimuseta keelatakse, ja kontroll ühega saab vastuse selle tellimuse kohta ja mitte millegi muu.

Üks piiratud erand, ja stabiilset käepidet ei ole

Kontroll ei võta nimekirja, vahemikku ega filtrit, ja eksporti ei ole. See on disain: liides, mis vastab ühele ankurdatud küsimusele korraga, teeb ülevaate kulu lineaarseks kassade arvuga, mida ülevaataja peab suutma seletada, ja miski seal ei skaleeru ründaja kasuks.

Üks liides on ankurdusreeglist vabastatud, ja tema piirid on koodis kinni. Pro pood saab oma elu jooksul teha ühe ajaloo skanni: üks seanss kuni 250 000 minevikutellimusega, iga rida saab vastuseks strong, weak või none samasugustes kategooriates, ja ühtegi rida alles ei hoita. Need read ei ole ankurdatud kassasse, seega selle ühe seansi kohta astub ülal toodud kulu argumendi asemele kõva piir: üks seanss poe kohta, 250 000 rida, ja teine skann ainult pärast operaatori lähtestust, mis läheb koos põhjusega auditilogisse. Piirid on turvalehel.

Teine pool on alias. Kui kontroll millegagi vastab, kannab vastus läbipaistmatut käepidet, ja see käepide on poe kohta: sama jälg ilmub igale poele, kes teda näeb, teise identifikaatori all. Seega kaks liiget, kes märkmeid võrdlevad, ei saa öelda, kas neil on üks jälg või kaks, ja aliast ei saa poodide vahel stabiilseks võtmeks kuhjata. Ta on hea ainsa asja jaoks, milleks pood teda vajab, mis on äratundmine, et kaks tema enda tellimust puudutasid sama ajalugu.

404, mitte 403

Küsige teise poe tellimust ja vastus on 404 not_found, täpselt vastus tellimusele, mida pole kusagil kunagi olnud. Ilmne staatusekood on 403, ja ilmse vastu valimine ongi see kontroll.

403 tähendab see on olemas ja teile teda ei anta. See on üks bitt, ja üks bitt on kogu loetlemine: kõndige viidete ruumis, hoidke need, mis vastavad 403, ja te olete õppinud, millised viited on võrgustikus mujal päris. 404 tagastab sama tühja „sellist tellimust ei ole” ja „ei ole teie tellimus” kohta, seega kõnd lõpeb sama palju teabega, kui ta algas, ja sama ühetaolisus hoiab sisemisel liidesel, mida partneriportaal kasutab. Hind on vähem abivalmis viga integraatorile, kes kirjutas vale viite, ja see vahetus on teadlik.

Nende nelja taga istub üks käitumuslik meede, ja tema olemasolu on kogu see, mida temast avaldatakse: võti, kelle liiklus lakkab kassa liiklusena paistmast, külmutatakse ülevaatuseks.

Mida vältimine maksab

Mida sondiv liige peab kulutama

Iga sond on allkirjastatud päring teie enda võtme all, antud ettevõttele, kes allkirjastas lepingu, seega anonüümset positsiooni, kust küsida, ei ole. Iga sond kannab tellimuse viidet, mis on väide, et kassa juhtus teie poes, ja selline, millele teilt saab tellimust küsida. Ülevaade, mis nime kannab, on püsiv kirjalik kirje teie enda nime all paljudest kassadest, mida ei juhtunud.

Mida nad võidavad

Ühe kategooriavastuse ühe tellimuse kohta, mis neil juba oli. Mitte teise poe identifikaatoreid, mitte tema silte, mitte tema tõendit, mitte tema nime, ja mitte midagi, mis järgmise vastusega koonduks pildiks kellegi teise ärist. Ja sondimine mahus, mis teile midagi ütleks, on sama asi kui panna oma võti töötamast, seega kaks otsa ei kohtu kunagi: odav versioon ei õpi midagi, ja versioon, mis võiks midagi õppida, ei jää kättesaadavaks. Ainus kirjas erand on ajaloo skann: kord poe elus vastab ta kuni 250 000 reale, millest ühegi taga ei ole kassat.

Kuidas kontrollida

Mõlemad pooled on kontrollitavad teie enda võtmega, ja kumbki kontroll ei vaja midagi, mis kuulub kellelegi teisele. Esimene on ankur: saatke muidu kehtiv kontroll, millel kumbagi viidet ei ole.

# Signed for real, and with an Idempotency-Key: both are checked ahead of the
# payload, so a placeholder signature answers 401 and a missing key answers 400
# before the anchor rule ever gets a chance to speak.
curl -s -X POST https://api.heatrail.eu/v1/check \
  -H "Content-Type: application/json" \
  -H "Authorization: HR1 {key id}:{signature}" \
  -H "Idempotency-Key: chk-verify-anchor-rule-01" \
  -d '{"ip":"203.0.113.42"}'

# 422 invalid_payload. The details name order_ref and session_ref: at
# least one must be present. Nothing was looked up, nothing was stored.

Teine on ühetaoline vastus. Küsige tellimuse viidet, mis kuulub teisele poele, siis küsige uuesti üht, mille te kohapeal leiutasite ja mis ei kuulu kellelegi.

curl -s https://api.heatrail.eu/v1/orders/ord-not-yours/explain \
  -H "Authorization: HR1 {key id}:{signature}"

curl -s https://api.heatrail.eu/v1/orders/ord-nobody-has-this/explain \
  -H "Authorization: HR1 {key id}:{signature}"

# 404 not_found, twice. Same status, same body. The reference that exists
# somewhere else and the reference that exists nowhere are one case.

Selle staatusekoodi taga olev põhjendus on isolatsioonis turvalehel, ja ülal olevad väljanimed ja veakoodid on need API viites.

Heatrail

This site is not public yet

Heatrail is in a private pre-launch period. Enter the access password to continue.

Enquiries: hello@heatrail.eu