Utmaningar för bevis på arbete: stoppa robotar utan att irritera människor
Ingen gillar att klicka på trafikljus för att bevisa att de är mänskliga. Utmaningar som 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 mätbart är bättre på än vad du är, medan ett företag skördar arbetet med att träna bildigenkänningsmodeller. Under tiden betalar de faktiska botoperatörerna en lösningstjänst en bråkdel av en procent 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.
Bevis på arbete 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 för att lösa och nästan ingenting att verifiera: hitta ett värde som, när hashed tillsammans med utmaningen, producerar en hash som börjar med ett visst antal nollor. Det finns ingen genväg; du försöker med 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ärt att sluta fungera.
Detta är snarare ett ekonomiskt försvar än ett upptäckande, och det är dess verkliga styrka. Det behöver inte vara smart om fingeravtryck, inte försämras som bots förbättras, och kan inte outsourcas till en mänsklig lösa gård eftersom kostnaden är CPU-tid, och en mänsklig klicka knappar hjälper inte.
Hur det faktiskt går till
Sekvensen är kort. En besökare begär en skyddad sida. Kanten returnerar istället en lätt utmaningssida 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 på 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årighetsgraden är en ratt snarare än en omkopplare. En låg inställning är omärklig; en hög tar ett par sekunder och gör automatiseringen dramatiskt dyrare. Höj det för en inloggningssida under aktiv attack, håll det lågt för allmän surfning, och de flesta besökare lär sig aldrig att funktionen finns.
Osynligt läge
- Löser ljudlöst i bakgrunden
- Besökaren ser ett kort, tomt ögonblick som mest
- Högerstandard för allmänt skydd
Interaktivt läge
- Visar en kort förloppsindikator
- Bättre vid hög svårighetsgrad, där förseningen är märkbar
- Fortfarande inget för människan att faktiskt lösa
Mot en CAPTCHA
| CAPTCHA | Bevis på arbete | |
|---|---|---|
| Ansträngningar 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 bevis på arbete inte gör
Den sista raden förtjänar att utökas, eftersom ett försvar du missförstår är värre än ett du inte har.
Bevis på arbete ökar kostnaden per begäran. 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 målinriktad angripare gör det väldigt lite.
Det medfö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.
Undanta 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 själv från sökresultaten. Verifiera med omvänd DNS istället för att lita på användaragenten, och låt den sedan gå igenom oemotsagd.
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 hittar 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 snarare än 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 att riktiga besökare blir långsammare?
Lite omärkligt, 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 mindre drivna enheter tar längre tid, vilket är värt att ta hänsyn till när du 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.
En CAPTCHA försöker skilja människor och maskiner åt och blir mindre kapabel att göra det varje år. Bevis på arbete slutar försöka och tar betalt för begäran istället. Det är ett mindre påstående, men det fortsätter att vara sant.
Se hur NordicCDN gör detta för din webbplats:
Mads har arbetat inom IT – mestadels som värd – sedan han var 16. Han tog tidigt del i ett SaaS-företag och hjälpte till att växa fram till förvärvet av Visma, 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.