Proof-of-work-utmaningar: stoppa robotar utan att irritera människor
Ingen tycker om att klicka på trafikljus för att bevisa att de är mänskliga. Utmaningar för bevis på arbete tar ett annat tillvägagångssätt: gör arbetet osynligt för dig och dyrt för den som skickar en miljon förfrågningar.
CAPTCHA är en konstig teknik när man tänker på det. För att bevisa att du inte är en robot utför du en uppgift som robotar nu är mätbart bättre på än du är, medan ett företag skördar arbetskraften för att träna bildigenkänningsmodeller. Under tiden betalar de faktiska botoperatörerna en lösningstjänst en bråkdel av en cent per pussel och fortsätter.
Proof-of-work utmaningar kommer på problemet från en helt annan riktning, och skiftet är värt att förstå eftersom det förändrar vad du faktiskt försvarar.
Sluta identifiera, börja ladda
En CAPTCHA försöker svara "är det här en människa?" - en fråga som blir svårare för varje år och var aldrig riktigt ansvarig i första hand.
Proof-of-work frågar inte. Det förutsätter att det inte kan berätta, och i stället gör varje begäran kostar en liten mängd beräkning. Din webbläsare får ett pussel som tar lite CPU att lösa och nästan ingenting att verifiera: hitta ett värde som, när hash tillsammans med utmaningen, producerar en hash som börjar med ett visst antal nollor. Det finns ingen genväg; du försöker värden tills en fungerar.
För en besökare som är några hundra millisekunder av en bakgrundstråd, helt obemärkt. För någon som skickar en miljon förfrågningar är det en miljon pussel, och aritmetiken som gjorde operationen värd att sluta fungera.
Detta är ett ekonomiskt försvar snarare än en upptäckt, och det är dess verkliga styrka. Det behöver inte vara smart om fingeravtryck, inte försämras som robotar förbättras, och kan inte outsourcas till en mänsklig lösa gård eftersom kostnaden är CPU-tid, och en människa klicka på knappar hjälper inte.
Hur det faktiskt går till
Sekvensen är kort. En besökare begär en skyddad sida. Kanten returnerar en lätt utmaningssida istället, med ett pussel och en svårighetsparameter. JavaScript i webbläsaren löser det, vanligtvis i en webbarbetare så att sidan förblir responsiv. Lösningen skickas in, verifieras i mikrosekunder och besökaren får en signerad cookie som tillåter dem under en konfigurerad period - vanligtvis en dag - så att de inte utmanas igen vid varje klick.
Svårighet är en ratt snarare än en switch. En låg inställning är omärklig; en hög tar ett par sekunder och gör automatisering dramatiskt dyrare. Höj den för en inloggningssida under aktiv attack, håll den låg för allmän surfning, och de flesta besökare lär sig aldrig att funktionen finns.
Osynligt läge
- Löser tyst i bakgrunden
- Besökaren ser ett kort blankt ögonblick på de flesta
- Rätt standard för allmänt skydd
Interaktivt läge
- Visar en kort statusindikator
- Bättre för hög svårighetsgrad, där fördröjningen är märkbar
- Ingenting för människan att lösa
Mot en CAPTCHA
| CAPTCHA | Bevis-av-arbete | |
|---|---|---|
| Ansträngning för människan | Lös pussel | Ingen |
| Tillgänglighet | Ofta en barriär | Ingen interaktion krävs |
| Besegrade genom att lösa gårdar | Ja, billigt | Nej kostnaden är CPU, inte klick |
| Datadelning från tredje part | Vanligtvis | Ingen krävs |
| Kostnad för en legitim besökare | Sekunder av uppmärksamhet | Millisekunder av CPU |
| Stoppar en målinriktad angripare med låg volym | Något | Inte riktigt |
Vad proof-of-work inte gör
Den sista raden förtjänar att utvidgas, för ett försvar du missförstår är värre än ett du inte har.
Proof-of-work höjer kostnaden per förfrågan. Om en angripare bara behöver en handfull förfrågningar - testa en specifik stulen referens, utnyttja en känd sårbarhet, skrapa en sida - kostnaden är försumbar och de kommer att betala den utan att märka det. Det är ett volymförsvar, och mot en bestämd riktad angripare gör det väldigt lite.
Det innebär också en verklig kostnad för besökare med långsamma enheter. En tio år gammal Android-telefon tar betydligt längre tid än en nuvarande bärbar dator, så svårighetsinställningar som känns omedelbara på din maskin kanske inte är. Och det kräver JavaScript, vilket innebär att allt du vill nå din webbplats utan att köra skript - vissa tillgänglighetsverktyg, några legitima integrationer, RSS-läsare - behöver en undantagsväg.
Undantag alltid verifierade sökrobotar innan du aktiverar utmaningar. Googlebot löser inte JavaScript-pussel som en webbläsare gör, och utmanande det är ett effektivt sätt att ta bort dig från sökresultaten. Verifiera med omvänd DNS i stället för att lita på användaragenten, och låt den sedan passera obestridd.
Vanliga frågor
Vad är en proof-of-work utmaning?
En proof-of-work-utmaning kräver att en besökares webbläsare löser ett litet beräkningspussel - vanligtvis att hitta ett värde som producerar en hash med ett nödvändigt antal ledande nollor - innan den begärda sidan serveras. Lösning tar mätbar CPU-tid medan verifieringen är nästan omedelbar, så kostnaden faller på den som gör ett stort antal förfrågningar snarare än på enskilda besökare.
Är proof-of-work bättre än CAPTCHA?
För att blockera automatisering av stora volymer, i allmänhet ja: det kräver ingen interaktion från besökaren, presenterar ingen tillgänglighetsbarriär, delar ingen data med en tredje part och kan inte besegras av mänskliga lösa gårdar eftersom Kostnaden är CPU istället för klick. Det är svagare mot en riktad angripare som bara gör en handfull förfrågningar, där den extra kostnaden är försumbar.
Gör proof-of-work utmaningar sakta ner riktiga besökare?
Lite, och oftast omärkligt. Vid en typisk svårighet att ställa in en modern webbläsare löser pusslet på några hundra millisekunder i en bakgrundstråd, och en signerad cookie tillåter sedan besökaren för en konfigurerad period så att de inte utmanas Återigen på varje sida. Äldre eller lågdrivna enheter tar längre tid, vilket är värt att ta hänsyn till när man väljer svårigheter.
Kommer en proof-of-work-utmaning att blockera Googlebot?
Det kommer om du inte undanta det, och det skulle ta bort sidor från sökresultaten. Verifierade sökrobotar bör tillåtas innan utmaningar aktiveras, identifierade genom omvänd DNS-verifiering av deras IP-adresser snarare än av deras användaragentsträng, som trivialt förfalskas.
Inramningen värd att hålla: en CAPTCHA försöker berätta för människor och maskiner, och blir mindre kapabel att varje år. Proof-of-work slutar försöka, och avgifter för begäran istället. Det är ett mindre påstående, men det är ett som fortsätter att vara sant.
Se hur NordicCDN gör detta för din webbplats:
Mads har arbetat inom IT - mestadels värd - sedan han var 16. Han tog tidigt del i ett SaaS-företag och hjälpte till att växa fram till Vismas förvärv, har byggt och drivit datacenternätverk och fungerat som CTO för ett danskt datacenter. Han startade NordicCDN för att göra snabb och säker infrastruktur enkel att använda.