Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Namų darbas — atakuok žetoną, sulaužyk transakciją

Augina programą. Pridėk kvietimus į savo programą, jei ji turi „pasidalink su kažkuo be paskyros" srautą — kitaip dirbk su SignFlow.

  1. Atakuok žetoną, nerask ką atakuoti. Nukopijuok pasirašymo nuorodą ir sudarkyk žetoną — pakeisk simbolį, nutrumpink. Maršrutas išsprendžia žetoną ir neranda eilutės (pats puslapis atkeliaus kitą pamoką). Dabar pažiūrėk į užklausos eilutę: joje nėra dokumento ID. Parašyk du sakinius, lygindamas su L9 trynimu, kur dokumento ID yra URL ir turi būti tikrinamas savininkui. Kokią klaidų klasę leidžia kiekvienas dizainas?

  2. Sulaužyk transakciją tyčia. Laikinai perkelk MarkDocumentSent prieš pasirašytojų ciklą, tada priversk antrą CreateSigner nepavykti pakviesdamas dublikatinį el. paštą (UNIQUE (document_id, email) apribojimas jį atmes). Patvirtink, kad dokumentas nepasivertė į sent ir jokios pasirašytojų eilutės neįrašytos. Atkurk tvarką. Būtent tai perka viena transakcija.

  3. Pašalink dublikatus ir patikrink. Pakviesk tą patį adresą du kartus viename teksto lauke, plius vieną šiukšlinį eilutės tekstą (not-an-email). Patvirtink, kad parseEmails sujungia dublikatą ir atmeta neteisingą, o pasirašytojais tampa tik teisingi, unikalūs adresai.

  4. Kodėl maišuoti žetoną? signers lentelė saugo token_hash, ne žetoną. Tarkim, ji saugotų neapdorotą žetoną ir tavo duomenų bazės atsarginė kopija nutekėtų. Ką galėtų padaryti tos kopijos turėtojas? Dabar paaiškink, kodėl maišos saugojimas daro kopiją bevertę — tas pats argumentas kaip sesijoms ir atstatymams, trečią kartą.

Kita pamoka įžiebia nuorodą: pasirašytojas atveria savo puslapį, peržiūri dokumentą ir pasirašo — ir sutinki sąžiningumo įspėjimą, kuris apibrėžia, kas šis parašas yra ir kas nėra.