See artikkel on esimene postituste seeriast, mida kirjutan erinevate SaaS-i toodete ja veebisaitide käitamise kohta viimase 8 aasta jooksul. Jagan mõningaid probleeme, millega olen tegelenud, õppetunde, mida olen õppinud, tehtud vigu ja võib-olla mõnda asja, mis läks õigesti. Anna mulle teada Mida sa arvad!
2019. või 2020. aastal otsustasin kogu taustaprogrammi ümber kirjutada Blokeeri saatja, SaaS-i rakendus, mis aitab kasutajatel muude funktsioonide hulgas luua paremaid meiliplokke. Selle käigus lisasin mõned uued funktsioonid ja läksin üle palju kaasaegsematele tehnoloogiatele. Käivitasin testid, juurutasin koodi, testisin käsitsi kõike tootmises ja peale mõne juhusliku koefitsiendi ja lõpptulemuse tundus kõik hästi töötavat. Ma soovin, et see oleks loo lõpp, aga…
Mõni nädal hiljem teavitas mind klient (mis on iseenesest piinlik), et teenus ei tööta ja nende postkasti saabus palju e-kirju, mis tuleks blokeerida, nii et ma uurisin. Paljudel juhtudel on see probleem tingitud sellest, et Google eemaldab meie teenusest ühenduse kasutaja kontoga, mida süsteem lahendab, teavitades kasutajat meili teel ja paludes tal uuesti ühendus luua, kuid seekord oli tegemist millegi muuga.
Näis, et taustatöötaja, kes kontrollib e-kirju kasutajate blokeeringute suhtes, jooksis iga 5–10 minuti järel kokku. Kõige veidram osa – logides vigu ei olnud, mälu oli korras, kuid CPU torkas aeg-ajalt pealtnäha juhuslikel aegadel. Seega pidin järgmise 24 tunni jooksul (koos 3-tunnise unepausiga – vabandust kliendid 😬) iga kord, kui see kokku kukkus, töötaja käsitsi taaskäivitama. Mingil põhjusel ootas Elastic Beanstalk teenus taaskäivitamist liiga kaua, mistõttu pidin seda käsitsi tegema.
Tootmisprobleemide silumine on alati piin, eriti kuna ma ei suutnud probleemi kohapeal taasesitada, rääkimata selle põhjuse väljaselgitamisest. Nii nagu iga "hea" arendaja, alustasin just logimist kõik ja ootasin, kuni server uuesti kokku jookseb. Kuna protsessor hüppas perioodiliselt, arvasin, et see pole makroprobleem (nagu kui mälu saab otsa) ja selle põhjustas tõenäoliselt konkreetne e-kiri või kasutaja. Nii et ma proovisin seda kitsendada:
- Kas see jooksis kokku teatud e-posti ID või tüübiga?
- Kas see jooksis antud kliendi jaoks kokku?
- Kas see jooksis mingi korrapärase intervalliga kokku?
Pärast tundidepikkust kestmist ja palkide vaatamist kauem, kui oleksin soovinud, piirdusin lõpuks konkreetse kliendiga. Sealt edasi kitsenes otsinguruum üsna palju – tõenäoliselt oli tegemist blokeerimisreegli või konkreetse meiliga, mida meie server pidevalt uuesti proovis. Minu õnneks oli see esimene, mille silumine on palju lihtsam probleem, kuna oleme väga privaatsusele keskendunud ettevõte ega salvesta ega vaata meiliandmeid.
Enne kui jõuame täpse probleemi juurde, räägime kõigepealt ühest Block Senderi funktsioonist. Sel ajal oli mul palju kliente, kes palusid metamärkide blokeerimist, mis võimaldaks neil blokeerida teatud tüüpi e-posti aadresse, mis järgisid sama mustrit. Näiteks kui soovite blokeerida kõik turunduse e-posti aadressidelt saadavad meilid, võite kasutada metamärki marketing@*
ja see blokeeriks kõik meilid mis tahes aadressilt, mis algas marketing@
.
Üks asi, millele ma ei mõelnud, on see, et kõik ei saa aru, kuidas metamärgid töötavad. Eeldasin, et enamik inimesi kasutab neid samamoodi, nagu mina arendajana, kasutades ühte *
mis tahes arvu tähemärkide esitamiseks. Kahjuks arvas see konkreetne kasutaja, et peate kasutama üks metamärk iga tähemärgi kohta, mida soovite sobitada. Nende puhul soovisid nad blokeerida kõik teatud domeeni meilid (see on funktsioon Block Sender, kuid nad ei pruukinud sellest aru saada, mis on omaette probleem). Nii et kasutamise asemel *@example.com
, nad kasutasid **********@example.com
.
POV: kasutajate vaatamine, kuidas teie rakendust kasutavad…
Metamärkide käsitlemiseks oma töötaja serveris kasutame Node.js teeki matšer, mis aitab maakera sobitamist, muutes selle regulaaravaldiseks. See raamatukogu pöörduks siis **********@example.com
millekski selliseks regexiks:
/[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*[sS]*@example.com/i
Kui teil on regexiga kogemusi, siis teate, et need võivad väga kiiresti muutuda keeruliseks, eriti arvutuslikul tasandil. Ülaltoodud avaldise sobitamine mis tahes mõistliku pikkusega tekstiga muutub arvutuslikult väga kulukaks, mis lõppes meie tööserveri CPU sidumisega. Seetõttu jookseb server kokku iga paari minuti järel; see takerduks keeruka regulaaravaldise sobitamiseks e-posti aadressiga. Nii et iga kord, kui see kasutaja meili saab, jookseb see lisaks kõikidele ajutiste tõrgete käsitlemiseks sisseehitatud korduskatsetele meie serverisse kokku.
Kuidas ma siis selle parandasin? Ilmselgelt oli kiire lahendus leida järjestikku kõik mitme metamärgiga plokid ja neid parandada. Kuid mul oli vaja ka paremini teha kasutaja sisendi puhastamiseks. Iga kasutaja võib sisestada regexi ja kogu süsteemi a-ga maha võtta ReDoS rünnak.
Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!
Selle konkreetse juhtumi käsitlemine oli üsna lihtne – eemaldage järjestikused metamärgid:
block = block.replace(/*+/g, '*')
Kuid see jätab rakenduse siiski avatuks muud tüüpi ReDoS-i rünnakutele. Õnneks on mitmeid pakette/teeke, mis aitavad meid ka nende tüüpide puhul:
Kasutades ülaltoodud lahenduste ja muude kaitsemeetmete kombinatsiooni, olen suutnud vältida selle kordumist. Kuid see oli hea meeldetuletus, et te ei saa kunagi usaldada kasutaja sisendit ja peaksite selle alati enne oma rakenduses kasutamist desinfitseerima. Ma isegi ei teadnud, et see on võimalik probleem, kuni see minuga juhtus, nii et loodetavasti aitab see kellelgi teisel sama probleemi vältida.
Kas teil on küsimusi, kommentaare või soovite oma lugu jagada? Siruta käed puperdama!
- SEO-põhise sisu ja PR-levi. Võimenduge juba täna.
- PlatoData.Network Vertikaalne generatiivne Ai. Jõustage ennast. Juurdepääs siia.
- PlatoAiStream. Web3 luure. Täiustatud teadmised. Juurdepääs siia.
- PlatoESG. Süsinik, CleanTech, Energia, Keskkond päikeseenergia, Jäätmekäitluse. Juurdepääs siia.
- PlatoTervis. Biotehnoloogia ja kliiniliste uuringute luureandmed. Juurdepääs siia.
- Allikas: https://stackabuse.com/behind-the-scenes-never-trust-user-input/
- :on
- :on
- :mitte
- $ UP
- 1
- 20
- 2019
- 2020
- 24
- 8
- a
- Võimalik
- MEIST
- üle
- konto
- tegelikult
- lisatud
- lisamine
- aadress
- aadressid
- jälle
- vastu
- Materjal: BPA ja flataatide vaba plastik
- võimaldama
- üksi
- Ka
- alati
- vahel
- an
- ja
- mistahes
- app
- taotlus
- OLEME
- artikkel
- AS
- küsib
- oletus
- At
- Reageerib
- vältima
- teadlik
- Taustaprogramm
- BE
- beanstalk
- muutub
- olnud
- enne
- taga
- kaamerate taga
- on
- Parem
- Natuke
- Blokeerima
- blokeerimine
- Plokid
- piir
- Murdma
- ehitatud
- kuid
- by
- CAN
- Saab
- mis
- juhul
- põhjustatud
- põhjustades
- kindel
- iseloom
- märki
- kontroll
- kood
- kombinatsioon
- kommentaarid
- ettevõte
- keeruline
- keeruline
- arvutuslik
- ühendus
- parandada
- võiks
- ei suutnud
- krahh
- Kokku jooksnud
- Krahh
- looma
- klient
- Kliendid
- andmed
- käsitlenud
- otsustatud
- lähetatud
- arendaja
- DID
- ei teinud
- do
- domeen
- don
- alla
- kaks
- iga
- lihtsam
- teine
- kirju
- lõpp
- lõppes
- lõppeb
- sisene
- Kogu
- vead
- eriti
- Isegi
- lõpuks
- Iga
- igaüks
- kõik
- näide
- kallis
- kogemus
- väljend
- rikete
- õiglaselt
- kaugele
- tunnusjoon
- FUNKTSIOONID
- vähe
- Joonis
- arvasin
- leidma
- lõpp
- esimene
- Määrama
- Keskenduma
- Järgneb
- Järel
- eest
- endine
- Alates
- saama
- saamine
- gif
- Git
- antud
- hea
- suur
- suunata
- olnud
- käepide
- Varred
- käed-
- juhtus
- Juhtub
- Olema
- aitama
- aitab
- loodetavasti
- Lahtiolekuajad
- hõljuma
- Kuidas
- HTTPS
- i
- ID
- if
- in
- lisatud
- sisend
- selle asemel
- sisse
- probleem
- küsimustes
- IT
- ise
- töö
- lihtsalt
- hoitakse
- Teadma
- viimane
- pärast
- õppinud
- õppimine
- Pikkus
- Lessons
- laskma
- Tase
- LG
- Raamatukogu
- nagu
- Tõenäoliselt
- ll
- kohapeal
- metsaraie
- Pikk
- enam
- Vaatasin
- palju
- Makro
- tehtud
- käsitsi
- palju
- Turundus
- Vastama
- sobitamine
- võib olla
- me
- Mälu
- protokoll
- vigu
- Kaasaegne
- kaasaegsed tehnoloogiad
- rohkem
- kõige
- palju
- mitmekordne
- peab
- kitsas
- emakeelena
- vaja
- mitte kunagi
- Uus
- Uued funktsioonid
- järgmine
- ei
- sõlme
- Node.js
- teatades
- number
- Ennustus
- of
- on
- ONE
- avatud
- or
- Muu
- meie
- välja
- enda
- Valu
- osa
- eriline
- Muster
- Inimesed
- Platon
- Platoni andmete intelligentsus
- PlatoData
- Postitusi
- potentsiaal
- Praktiline
- vältida
- tõenäoliselt
- Probleem
- protsess
- Produktsioon
- Toodet
- Küsimused
- Kiire
- kiiresti
- üsna
- juhuslik
- RE
- jõudma
- realiseeritud
- põhjus
- mõistlik
- saadud
- ühendage
- regulaaravaldis
- regulaarne
- meeldetuletus
- kõrvaldama
- eemaldades
- esindama
- õige
- ring
- Eeskiri
- jooks
- jooksmine
- s
- SaaS
- tagatisi
- sama
- stseenide
- Otsing
- tundus
- näiliselt
- saatja
- Seeria
- server
- teenus
- vari
- Jaga
- jagamine
- leht
- peaks
- lihtne
- alates
- uni
- So
- Lahendused
- mõned
- Keegi
- midagi
- Ruum
- konkreetse
- ora
- Stackabus
- standardite
- alustatud
- Veel
- Peatus
- salvestada
- Lugu
- süsteem
- Võtma
- rääkima
- Tehnoloogiad
- ajutine
- katsetatud
- testid
- tekst
- kui
- et
- .
- oma
- Neile
- SIIS
- Seal.
- Need
- nad
- asi
- asjad
- mõtlema
- see
- aeg
- korda
- et
- liiga
- üleminek
- proovitud
- Usalda
- üritab
- Pöörake
- Pööramine
- tüüp
- liigid
- mõistab
- kahjuks
- kuni
- täiendatud
- us
- kasutama
- Kasutatud
- Kasutaja
- Kasutajad
- kasutamine
- eri
- Ve
- väga
- kaudu
- vaade
- ootamine
- tahan
- tagaotsitav
- oli
- ei olnud
- vaadates
- Tee..
- we
- veebilehed
- nädalat
- Hästi
- läks
- olid
- M
- millal
- mis
- kogu
- miks
- Wikipedia
- soov
- koos
- Töö
- töötaja
- töö
- oleks
- kirjutamine
- aastat
- sa
- Sinu
- sephyrnet