Jednorázové schránky
Funkční adresa pro někoho, kdo žádnou nemá: bez účtu, bez klíče, a týž den je pryč.
Co je jednorázová schránka
Volající si vyžádá adresu na doméně, kterou tato instalace vlastní, pár minut ji sleduje, přečte, co přijde, a opustí ji. Existuje kvůli potvrzovacímu kódu, kvůli otázce „co tenhle formulář vlastně odesílá“ a kvůli registraci, kterou nechcete mít navěšenou na adrese, kterou budete používat i za pět let.
- Jen přijímá a nic víc. Odesílání neexistuje: schránka nemá identitu, jako které by odesílala, a žádné z těchto devíti volání nepošle zprávu na drát.
- Zápůjčka trvá ve výchozím stavu 60 minut a dá se posunout až na 24 hodin, vždy po hodině.
- Pojme 50 zpráv, počítaných tak, jak přicházejí. Pošta, která dorazí do plné schránky, se zahodí, nezařadí do fronty, a smazáním jedné si místo pro další nekoupíte.
- Na konci zápůjčky se pošta SMAŽE, neskryje ani nearchivuje. Řádek ji přežije o týden, aby adresa nemohla být vydána znovu, dokud na ni pomalý odesílatel ještě opakuje pokusy.
- Nic z toho se nedotkne skutečné schránky. Jednorázová zpráva žije ve vlastní tabulce a žádný dotaz na této cestě se ke skutečné nedostane.
Jsou to táž volání, jaká dělá bezplatný nástroj na tomto webu, takže cokoli umí ta stránka, umí i váš kód. API je tu pro případ, kdy stránka nestačí: pro testovací sadu, která chce novou adresu na každý běh.
Adresa není přihlašovací údaj
Jednorázová adresa se vepíše do registračního formuláře ve chvíli, kdy je vydána. Odtud putuje v hlavičce To:, přes logy odesílatele a do libovolného CRM, které sedí na druhém konci. Kdyby ke čtení pošty stačilo adresu znát, nástroj by ze své podstaty vyzradil každou schránku, kterou vydal, a to přesně té straně, kterou si volající držel od těla.
Vytvoření schránky proto vrací druhou hodnotu: token, 32 náhodných bajtů ve tvaru oe_inbox_ plus 43 znaků base64url. Objeví se v té jediné odpovědi a v žádné jiné. Řádek si drží jen jeho klíčovaný hash, takže ho nic neobnoví, ani požadavek na podporu, ani dump databáze. Ztratit token znamená ztratit schránku, a to je u přihlašovacího údaje, který čte něčí poštu, správný výsledek.
# 1. Mint one. This is the only response that carries a token.curl -s -X POST "$OE/temp-mail/inboxes" -H "Content-Type: application/json" -d '{}' # 2. Keep it, and read with it.export INBOX="Authorization: Bearer oe_inbox_kQ8v…"curl -s "$OE/temp-mail/inboxes/tinb_9c2f…/messages" -H "$INBOX"Pošlete na některou z těchto cest API klíč oe_live_ nebo oe_test_ a bude odmítnut jako invalid_credential_type, ne jako plochá 401. Dva druhy přihlašovacích údajů tu sdílejí jednoho hostitele a jednu hlavičku a „neautorizováno“ by vás nechalo hádat, který z těch vašich byl špatně.
Zápůjčka a její prodloužení
Hodina, ne deset minut, po kterých se celý žánr jmenuje. Deset stačí na potvrzovací kód a nestačí na druhou půlku toho, k čemu se tyto schránky používají: na zkušební verzi, která napíše znovu druhý den ráno, na formulář vyplněný dvakrát, protože prvnímu pokusu vypršel čas. ttlMinutes při vytvoření si řekne o něco jiného, od 1 do 1440; číslo mimo tento rozsah se odmítne s 422, místo aby se potichu upravilo, protože expiraci, o kterou jste nežádali, už máte zaplánovanou.
POST /temp-mail/inboxes/{id}/extend přidá hodinu k expiraci, ne k teď, takže prodloužením s předstihem o zbývající čas nepřijdete. Funguje 23krát a tvrdší z obou stropů je den od okamžiku vzniku schránky: zápůjčka, která k němu už sahá, nemá co dokoupit, ať už bylo prodloužení spotřebováno sebeméně. extensionsLeft v každé odpovědi o schránce počítá oba, takže klient může tlačítko zešedivit; na nule volání odpoví 409 extension_limit.
Vypršelá schránka přestane autentizovat v okamžiku, kdy vyprší: její token odpovídá 404, aniž by čekal na úklid. Poštu maže právě úklid a ten běží v hodinovém cronu; DELETE /temp-mail/inboxes/{id} je totéž smazání na vyžádání.
Stropy
Všechno tohle jsou počítané řádky, ne rate limiter. V této kódové bázi žádný limiter, po kterém by se dalo sáhnout, není, a říct to je užitečnější než naznačovat obranu, která tu není. Jsou umístěné tam, kde by vznikla škoda: u vydávání a u úložiště.
| Strop | Hodnota | Co se při jeho dosažení stane |
|---|---|---|
| Zápůjčka | 60 minut, prodloužitelné na 24 hodin | 409 conflict_error / extension_limit |
| Zpráv na schránku | 50 | Další pošta se zahodí hned ve dveřích. Nepíše se žádný bounce, nic se neřadí do fronty a smazáním zprávy se místo nevrátí. |
| Vydaných schránek | 6 za hodinu, 30 za den, na volajícího | 429 rate_limit_error / too_many_inboxes |
| Uložené tělo | 2 MB | truncated: true na zprávě; zbytek je pryč. |
| Bajty příloh | 8 MB na každou | content je null a metadata se zachovají, což není totéž co prázdný soubor. |
Strop na vydávání se počítá proti klíčovanému hashi IP adresy klienta a zničená schránka se počítá dál, takže zahodit jednu není způsob, jak si koupit další. Za cizí proxy se dá předávaná hlavička podvrhnout, což je známá slabina toho stropu, ne díra v přihlašovacím údaji: nic tady na této hodnotě neopravňuje.
Co tu není
Zatím nevydánoPřijít na to pokusem je horší, než se to dozvědět:
- Žádné odesílání, v žádné podobě. Jednorázová schránka nemá spojení, jako které by odesílala, a přidat ho by z anonymního, neautentizovaného endpointu udělalo open relay.
- Žádné přejmenování. Změnit adresu znamená vytvořit druhou schránku: přejmenování na místě by uvolnilo starou local-part v okamžiku kliknutí a potvrzení už na cestě by se pak doručilo tomu, komu ji vydali jako další.
- Žádná pravidla, filtry, přeposílání, webhooky ani AI.
spamje příznak na zprávě a nic podle něj nejednalo. Nic se nikam nezařadilo a nic se tu nesumarizuje ani nepřevádí na embeddingy. - Žádné bounce zprávy. Pošta na doménu ze společného fondu, která nejmenuje ani živou jednorázovou schránku, ani adresu vytvořenou provozovatelem, se záměrně potichu zahodí: veřejný generátor adres přitahuje slovníkové útoky a napsat zprávu o doručení na jakoukoli návratovou cestu, kterou si útok nárokuje, by z instalace udělalo zdroj backscatteru.
- Žádná nakonfigurovaná doména znamená žádnou službu. Když je
TEMP_MAIL_DOMAINSprázdné,GET /temp-mail/domainsodpoví prázdným seznamem a vytvoření schránky odpoví 503temp_mail_unavailable. Příchozí doručení na doménu ze společného fondu nebylo na živé doméně pozorováno od začátku do konce.
Konfigurace domény, pokud instalaci provozujete vy
Ten seznam je konfigurace: rozdává se to, co pojmenuje TEMP_MAIL_DOMAINS. DNS nic neautomatizuje, takže čtyři z těchto pěti kroků jsou člověk u registrátora.
- Zaregistrujte pro to doménu. Použijte takovou, kterou jste ochotni nechat rozdávat cizím lidem. Každá adresa na ní sdílí její reputaci — proto také výběr rozprostírá nové schránky po fondu náhodně, místo aby plnil první doménu.
- Přidejte ji v aplikaci pod Nastavení → Domény. Tím vznikne odesílací identita a vypíšou se DNS záznamy k publikování.
- Publikujte u registrátora záznamy MX, SPF, DKIM a TXT
_openemail-challenge. Ověření čte živé DNS a přeověřuje se v cronu; nabízí se vždy jen ověřená doména. - Přidejte ověřenou doménu do
TEMP_MAIL_DOMAINSna serveru, oddělenou čárkou. Dokud tam není uvedená, je to běžná doména pracovního prostoru. - Nechte catch-all ZAPNUTÝ. Právě díky němu jednorázová adresa existuje, aniž by se vytvářela, protože pošta na libovolnou local part se přijme a přečte ještě před běžným dohledáním příjemce, takže pro doménu ze společného fondu se nikdy nezapíše řádek adresy; ponechat catch-all zapnutý by začalo zakládat jednorázovou poštu do skutečné schránky.
Rezervované local-parts (postmaster, abuse, security a zbytek RFC 2142) nemohou být nikdy jednorázové a propadnou místo toho do běžné schránky. Doména ze společného fondu, která pohltí vlastní hlášení o zneužití, je doména, která přestane být schopná doručovat kamkoli. Adresa, kterou si na doméně z fondu vytvoříte sami, třeba legal@ nebo privacy@, se chová stejně: pošta na ni skončí ve vaší schránce a nikomu nemůže být vydána jako jednorázová adresa.