Top
Best
New

Posted by xena 14 hours ago

It took a year to ship WebAssembly in Anubis(anubis.techaro.lol)
275 points | 135 commentspage 2
andai 6 hours ago|
Tangential but all the pages I see protected by Anubis are just static HTML. But bot traffic is only harmful on dynamic pages right?
JodieBenitez 5 hours ago||
I'm not a fan of Anubis for various reasons but the idea that bot traffic in only harmful with dynamic pages must die. CPU (yes, even to serve static pages) is not free, bandwidth is definitely not free. There's an idea that serving a static page to a bot has a marginal cost tending to zero, but it's never really zero and serving them by millions definitely has a cost.

Also, while some pages may look like static HTML pages, they may be generated on the fly by an expensive and/or slow backend, which adds to the cost. I happen to maintain servers for academics and some content management systems are slow and have an expensive CPU cost. While it's OK for the low number of humans interested in the subjects they deal with, it's definitely not fit for massive bot scrapping. And before you ask, no, it's not always practical to have cache upfront or to pre-generate all pages.

arcfour 4 hours ago||
There are numerous services that will let you host static pages for free or nearly free. There are also numerous services that sit in front of your website that can block bots and reduce load on your origin server, many of which are also free, or very low cost relative to the service they provide.

The situation you are in is far less dire sounding when you consider that you have these options available to you.

JodieBenitez 3 hours ago||
Except that I don't have these options per employer policies.
Nnnes 2 hours ago|||
Others have answered your question. A lot of the sites listed here https://anubis.techaro.lol/docs/user/known-instances/ have dynamic content; Git web interfaces in particular (Codeberg, the Linux kernel, FFMPEG, and more are on the list) are vulnerable to poorly or maliciously configured scrapers.
jeroenhd 4 hours ago|||
Shitty scrapers hitting images over and over again is also a problem. Not just /pic/1.webp - /pic/2.webp, but in practice I've seen three AI scrapers that would request things like /pic/1.webp?version=webp&foo=bar and other random query parameters that none of my domains even use. It's just stuck brute-forcing files or something, sucking up loads of bandwidth downloading the same image for no reason.

It also depends on if you want your content to be scraped. Any bot ignoring robots.txt should be considered potentially malicious and worth considering such mechanisms for.

trickypr 6 hours ago|||
The anubis docs website is used as an example of how anubis works.

Also, if you are not using a big CDN (e.g. Cloudflare), you still need to pay for the traffic (even if you don't pay as much for the CPU). This is doubly true for smaller CDNs like Bunny.

xena 5 hours ago||
Not only is it an example, it specifically is one of the first things I use to test experimental features so I get data back instantly.
tyre 6 hours ago|||
some people don't want to be scrapped at all, and most bots ignore `robots.txt`
kiicia 4 hours ago||
no, absolutely not, any malicious or dishonest bot traffic is harmful, generating unnecessary transfer and literally stealing data
arjie 12 hours ago||
Anubis is fine if you want to block bots that are bothering you, but I never understood why they don't have robots.txt at the root level too. I happily obey that for my private crawler. I suppose you don't want to duplicate implementations. Fair enough. I guess I should add an Anubis detector so I can just blacklist because that person clearly doesn't want bots.
mitxela 11 hours ago||
In this day and age, only good bots, the ones you actually want, obey robots.txt. You obtain no benefit by having a restrictive one.
arjie 10 hours ago||
That is true, but if you have Anubis you presumably do intend to `Disallow` all bots.
xena 12 hours ago|||
One of the standard library rules enables robots.txt passthrough by default. I can't control people not choosing to use it.
arjie 11 hours ago||
That makes sense, Xe, but you don't enable it at:

- https://techaro.lol/robots.txt

- https://anubis.techaro.lol/robots.txt

and the latter (at least) is Anubis protected. It could be just an omission. But if it's intentional, I am just curious why so that as a bot author I can be well-behaved.

tefkah 12 hours ago||
thanks for trying to make the web suck a little less these days xena!
jezek2 11 hours ago||
Great article, WebAssembly is such a good technology when you have use case for it.

I've just finished creating a WASM 1.0 implementation (simple JIT on x86 and x86_64) for plugin usage and I'm looking on how to support more languages beyond C (for which I have "micro-libc" to create really small binaries). In particular C++ and Rust so the article contains useful info for that. C++ that would be more problematic I think, would have to resort to full Emscripten or something... I've tried to compile standalone C++ stdlib but wasn't much sucessful yet.

BTW, I see in the screenshots you also test Firefox, I think it would make sense to test the latest two ESR versions (these are often used by Linux distributions).

Dwedit 5 hours ago||
How much data does it download off the server to run the challenge? I've made some tiny webassembly binaries before, but I've never seen Rust generate something tiny.
xena 5 hours ago|
It's in the range of 32-40Ki before compression. After compression it gets to be completely negligible.
raincole 13 hours ago||
It's still very unclear to me how Anubis is supposed to work in the long term or even the medium term. The assumption is that scrappers, a.k.a. AI companies, a.k.a. those who hog all the RAM, are short of memory...?
solid_fuel 13 hours ago||
The assumption is that requiring 1 second of compute before allowing a page load will have more impact on the people requesting 1000 pages/sec than it will on consumers requesting 1 page every minute.

Personally I don’t understand where this confusion comes from - it’s a simple economic tactic. Yes the large scale scrapers won’t run out of compute but putting anubis in front of a website demonstrably reduces the amount of crawling and that is the entire goal.

Aachen 12 hours ago|||
> requiring 1 second of compute before allowing a page load

After 1 solve, you get a cookie and can load tons of pages with it. Scrapers and user agents alike will need to spend the compute only once to get a valid session for themselves

Seems to be working so far though. Fwiw, lots of silly things stop bots until someone puts their mind (or tokens) to bypassing it, and then the blocking mechanism has to adapt. We'll see how it plays out, for now it's a lot better than begging big brother (cloudflare, google, or amazon captcha) for access, so I'm quite appreciative of what Techaro is doing

jdlshore 12 hours ago|||
The issue is that scrapers are rotating their IP and essentially performing a DDoS attack. Anubis is part of a defense-in-depth solution. If scrapers reuse a cookie, traditional anti-abuse mechanisms will work.
gruez 12 hours ago||
>If scrapers reuse a cookie, traditional anti-abuse mechanisms will work.

Scrapers can't change their strategy? It's not hard to think of mitigations: keep on using a session until you're banned, and failing that rotate your IP. Nowadays you don't even need to think. You can probably tell a LLM "write me a scraper that has adaptive anti-anti-bot mechanism".

embedding-shape 12 hours ago|||
> Scrapers can't change their strategy?

Yes, but you normally don't try to fight all strategies up front, you add stuff on a need-to basis. Currently, lots of people are in the stage of "need to get this thing using bunch of IPs to stop hammering my servers", apparently Anubis helps them with that. If that stops working, other tactics are tried, and so it goes on for the life of your service. Hasn't stopped yet, doesn't seem to be stopped soon either.

gruez 12 hours ago||
That argument also works against anubis. Why bother forcing clients to solve a PoW challenge, when you're fighting a bunch of unsophisticated attackers that will be deterred by a javascript challenge that requires them to solve `result = x + y`?
xena 11 hours ago|||
This is why there's the meta refresh challenge as an option: https://anubis.techaro.lol/docs/admin/configuration/challeng...

Turns out that in practice there's some bots that implement support for this but not JavaScript.

embedding-shape 11 hours ago||||
Point is, you get problems because of something like this, you try either approach. And when that stops working (because eventually it will), you add something else. Some work better against some actors, but also feels like it never ends, so slowly you add more things. I don't think Anubis is uniquely able to stop that particular type of annoyance, it's just one of the tools you can see if it helps. If you want to try something else before, makes a lot of sense to do so.
well_ackshually 2 hours ago||||
You're not fighting unsophisticated attackers. 50% of them are, maybe. The rest? They're actively hostile, detecting blocking attempts, moving on to botnets, DDoSing you and trying everything they can to bypass you.

People have been sent to jail for participating in LOIC attacks which were less destructive that what these bots do on the daily.

mitxela 11 hours ago|||
[flagged]
myng111 1 hour ago||
Not only is this not true, you are misgendering Xe. They use they/them pronouns.
bulder 12 hours ago|||
Plenty of these abusive scrapers are utilizing retail residential proxies, which will be applying forced rotations to avoid "burning" their compromised and or otherwise surreptitiously utilized IP address.
__s 10 hours ago||||
https://people.kernel.org/monsieuricon/creepy-crawlies reports anubis effectiveness falling off
doc_ick 8 hours ago||
I would disagree with the Anubis effectiveness falling off, but the llm bros are throwing life itself into training to defeat any “perceived” challenge.
mitxela 11 hours ago|||
If you change your IP address, it invalidates the cookie. If you don't change your IP address, you can be blocked by IP address.
drum55 12 hours ago||||
It’s not seconds though, it’s in the order of tens of milliseconds of work, it’s faster to complete the challenge than most http requests will take.

last difficulty 5 nonce 645376 in 9 ms (101.6MH/s, avx512-x16)

This takes many minutes to solve on a cellphone, 9 milliseconds on a cheap VPS. It’s not stopping anyone.

bombela 12 hours ago|||
Yep, on my aging phone it takes quite w noticable amount of time to go through. But on my more recent laptop wnd workstations, it's a quick flash of a manga lolita.
xenafan1 8 hours ago||
[flagged]
Jtariiiii 12 hours ago|||
>It’s not stopping anyone.

You could just spend 30 seconds googling instead of confidently asserting nonsense. There are plenty of people demonstrating that Anubis reduces bot traffic.

drum55 12 hours ago|||
That’s because its weird and mostly irrelevant, it’s nothing to do with the proof of work being any sort of economic impediment. It takes Claude a few minutes to write a near instant solver, that’s the maximum proof of work cost this adds.
yborg 6 hours ago||
This strain of nihilism about anti-bot efforts baffles me. Cloudflare built a gigantic business on stopping DDoS attacks. There will never be good faith self-restraint by AI bros, there is too much money at stake and no regulation, doing nothing means your only alternative is disconnect from the Internet. Anubis introduces enough friction that some percentage of the lunacy is throttled and possibly give your server a fighting chance.
gruez 12 hours ago|||
>There are plenty of people demonstrating that Anubis reduces bot traffic.

"Anubis reduces bot traffic" and "[the proof of work] is not stopping anyone" isn't contradictory, especially if anubis isn't being benchmarked against non-POW alternatives like IP/ASN bans, or tls fingerprinting.

Jtariiiii 12 hours ago||
"it's not stopping anyone" and "it is stopping some people" are mutually exclusive statements.
gruez 12 hours ago||
You're selectively quoting the comment. It's clearly talking about the PoW aspect not being a serious impediment.
xboxnolifes 3 hours ago||
Who cares if its PoW or something else? Does it matter in any meaningful way?
gruez 12 hours ago|||
>The assumption is that requiring 1 second of compute before allowing a page load will have more impact on the people requesting 1000 pages/sec than it will on consumers requesting 1 page every minute.

Which doesn't hold. A 1s delay, despite being inperceptible is still a cost to human users. After all, 3600 x 1s delay adds up to an hour. Worse yet, the typical human visitor will always have to solve a challenge, because chances are it's the first time they're visiting your blog or whatever. Someone scraping reuse a valid session for at least a few more pages.

There's also the problem of time. It might be tempting to think the cost of a challenge is 1M cpu cycles or whatever, but the cost is better modeled as two parts, a time cost (for the human) and a cpu cost (for the computer). A scraper might have to pay the cpu cost, but not the time cost, because they can have their scraper solve challenges in their sleep. Unless the user is utterly destitute, their time is worth far more than whatever the compute cost is.

fc417fc802 13 hours ago|||
The assumption is that there will always be some population distribution in terms of effort expended as well as in terms of problems caused. At present it's the lowest effort actors that are causing the highest number of problems. So an 80% (or even just a 20%) solution largely solves the practical problem faced by site operators.

If against all odds it turns out that skiddies (or agents or AI billionaires or what have you) are willing to burn inordinate amounts of RAM and CPU just to scrape autogenerated cgit pages that are of approximately zero value to them to begin with then I guess we'll just have to cross that bridge when we come to it.

XorNot 10 hours ago||
Okay but it's like no RAM at all. Thats the problem: you've got stupid bots causing a bunch of issues - these can be stopped.

And then regular users: who now can't really browse your site.

And then smart bots - anyone with even a moderate amount of funding in the AI space, who aren't even slightly slowed down.

The solution basically makes the favored customer well funded AI scrapers, not users.

jeroenhd 4 hours ago|||
Regular users store the cookie and do the challenge once. Bots do it over and over again throwing out the cookies so they're not rate-limited.

Extreme configurations with high difficulty do make for a frustrating experience on very old devices, but in practice it rarely gets in the way.

Only the tail end of what one could consider normal users (those running custom browsers or having JS disabled or nonfunctional) run into issues here, but they'll have these issues with any other bot-blocking mechanism that still offers some protection these days.

Apple's "ask your vendor for tokens to exchange for access" web standard gets around this, assuming those bespoke and Javascript-less browsers implement PATs, but that standard seems to be completely dead in the water outside of Safari.

fc417fc802 10 hours ago|||
> And then regular users: who now can't really browse your site.

That's entirely up to how the site operator configures the PoW challenge.

> anyone with even a moderate amount of funding in the AI space, who aren't even slightly slowed down

Do you have any evidence that it is the large well funded AI companies DoSing sites by (for example) scraping absurd numbers of permutations of cgit url parameters?

Even if it is (which I doubt), if all this accomplishes is getting them to spend 10 minutes optimizing their bots to not do that it will be a major win.

pelcg 13 hours ago||
[dead]
Retr0id 13 hours ago||
See also:

https://github.com/eternal-flame-AD/pow-buster - Browser extension that already used WASM to accelerate the anubis solver, among others.

https://github.com/kasper93/anubis_webgpu - Browser extension that uses webgpu, for another order-of-magnitude speedup (depending on your GPU of course).

throawayonthe 13 hours ago|
afaik argon2 should make the GPU less helpful
dist-epoch 13 hours ago||
Argon2 is already GPU-accelerated.
anthoniks 11 hours ago||
I think the idea is to just raise marginal costs for scraping high enough to make it expensive and non-profitable.
evmar 12 hours ago||
I think the Rust feature you’re looking for regarding recompiling the standard library is called “build-std”, that should be enough for you to search for it. (For similar reasons you also need that flag if you are trying to use Rust to build multithreaded wasm binaries, so it might come up for you!)
chews 14 hours ago|
It's wild to me that PoW systems are how we sort the bot problem... the bummer is that all this "work" is just wasted cycles, at least in crypto there is a token you can sell.
Levitating 13 hours ago||
> at least in crypto there is a token you can sell

That would defeat the purpose. The goal is to make scraping costly, not profitable.

articulatepang 13 hours ago|||
Scraping would be costly in this world: scrapers would have to spend tokens in order to get the webpage.

But, in this world, the website owner would receive tokens that they can then use to do whatever they want, including paying for servers and bandwidth. This is the sense in which the cycles aren’t wasted: the website owner now has cash to spend.

Effectively, both scrapers and ordinary users would be paying for the privilege of getting website bytes.

This also solves the problem of having to wait for your phone to solve the challenge while you’re browsing: you can buy or mine some tokens ahead of time and pay them as soon as challenged. So can the scrapers, but because they’re accessing enormous numbers of pages it’s hopefully prohibitively expensive for them.

cozzyd 13 hours ago||||
I guess it could in principle be profitable for the website, not the client?
xosc 13 hours ago|||
unfortunately at that point it would be indistinguishable from running cryptojacking on your website
LastTrain 11 hours ago||
No. The client is doing the work.
odo1242 9 hours ago||
The client is doing the work in both cases
TacticalCoder 13 hours ago|||
Yup was thinking the same: make honest people pay $0.00001 when they visit the site (in electricity/compute), have the challenge made so that only the website wins a tiny something. Bleed the bots dry.

> This makes Anubis challenges use a memory-hard proof of work function (argon2id) instead of just a CPU hard one. It also means that the "hey Claude vibeslop me a CUDA Anubis solver" route is on its way to being fundamentally dead.

Nice.

ancientcatz 4 hours ago||
[dead]
saagarjha 13 hours ago|||
Sure, then just replace it with something that is useful to society but not immediately profitable to a scraper, like science research
xena 13 hours ago||
I want to do this eventually, but it's hard to split things into the micro-tasks that would be required to make this work on Anubis. One of the ideas I'm throwing around is a world where Anubis helps fuzz old games to find timesaves in tool-assisted speedruns. It's harder than you think.
YoshiRulz 7 hours ago|||
The tools that exist for fuzzing speedruns (TASers call it "botting") are fairly primitive, excluding a few game-specific ones. Because of that, there really aren't that many TASes where a distributed randomised search could make improvements which don't get immediately overshadowed within a day of human attention. Improving botting tools and increasing their adoption would be more effective IMO. (Incidentally, TASVideos.org recently banned one of the people pioneering bot development.)

Meanwhile BOINC is well-established as the platform for distributed computation. If you can figure out how to squeeze its work units into Wasm challenges, I'm sure a lot of researchers would thank you.

brendoelfrendo 13 hours ago|||
This would be rad.
odo1242 12 hours ago|||
Well, there was CoinHive which did this exact thing 6-7 years ago, but that system got abused a bit much
CarVac 13 hours ago||
PoW was originally anti-spam technology.
More comments...