News for hackers. Stuff that matters.
Re:Denial of service and source code exposure in React Serve... by simonw on Thursday December 11, 2025 @04:59PM (#46237795)
React Server Components always felt uncomfortable to me because they make it hard to look at a piece of JavaScript code and derive which parts of it are going to run on the client and which parts will run on the server.

It turns out this introduces another problem too: in order to get that to work you need to implement some kind of DEEP serialization RPC mechanism - which is kind of opaque to the developer and, as we've recently seen, is a risky spot in terms of potential security vulnerabilities.

Re:Denial of service and source code exposure in React Serve... by tom1337 on Thursday December 11, 2025 @05:12PM (#46237967)
I was a fan of NextJS in the pages router era. You knew exactly where the line was between server and client code and it was pretty easy to keep track of that. Then I've began a new project and wanted to try out app router and I hated it. So many (to me common things) where just not possible because the code can run in the client and on the server so Headers might not always be available and it was just pure confusion whats running where.
Re:Denial of service and source code exposure in React Serve... by Uehreka on Thursday December 11, 2025 @06:06PM (#46238602)
I think we (the Next.js user community) need to organize and either convince Vercel to announce official support of the Pages router forever (or at least indefinitely, and stop posturing it as a deprecated-ish thing), or else fork Next.js and maintain the stable version of it that so many of us enjoyed. Every time Next comes up I see a ton of comments like this, everyone I talk to says this, and I almost never hear anyone say they like the App Router (and this is a pretty contrarian site, so if they existed I’d expect to see them here).
Re:Denial of service and source code exposure in React Serve... by hmcdona1 on Thursday December 11, 2025 @06:26PM (#46238811)
I would highly recommend just checking out TanStack Router/Start instead. It fills a different niche, with a slightly different approach, that the Next.js app router just hasn't prioritized enabling anymore.

What app router has become has its ideal uses, but if you explicitly preferred the DX of the pages router, you might enjoy TanStack Router/Start even more.

Re:Denial of service and source code exposure in React Serve... by cjonas on Friday December 12, 2025 @01:03AM (#46241304)
Last time I tried tanstack router, I spent half a day trying to get breadcrumbs to work. Nit: I also can't stand their docs site.
Re:Denial of service and source code exposure in React Serve... by rustystump on Friday December 12, 2025 @05:53PM (#46250035)
Tanstack anything has breaking changes constantly and they all exist in perpetual alpha states. It also has jumped on the rsc train with the same complexity pitfalls.

Some libs in the stack are great but they were made pre rsc fad.

Re:Denial of service and source code exposure in React Serve... by hmcdona1 on Tuesday December 16, 2025 @01:07AM (#46285325)
If you're using an alpha library then that's on you for not expecting breaking changes. They have plenty of 1.0+ libraries that do not receive any breaking changes between major releases and have remained stable for well over a year.

Also, you're just wrong? You literally cannot serve RSC components _at all_ even in TanStack Start yet. Even when support for them is added it will be opt-in for only certain kinds of RPC functions and they will work slightly differently than they do in Next.js app router(where they are the default everywhere). RPC != RSC.

Plus you can always stick to using TanStack Router exclusively (zero server at all) and you never will even have to worry about anything to do with RSCs...

Re:Denial of service and source code exposure in React Serve... by berekuk on Thursday December 11, 2025 @07:56PM (#46239616)
I've been using React since its initial release; I think both RSC and App Router are great, and things are better than ever.

It's the first stack that allows me to avoid REST or GraphQL endpoints by default, which was the main source of frontend overhead before RSC. Previously I had to make choices on how to organize API, which GraphQL client to choose (and none of them are perfect), how to optimize routes and waterfalls, etc. Now I just write exactly what I mean, with the very minimal set of external helper libs (nuqs and next-safe-action), and the framework matches my mental model of where I want to get very well.

Anti-React and anti-Next.js bias on HN is something that confuses me a lot; for many other topics here I feel pretty aligned with the crowd opinion on things, but not on this.

Re:Denial of service and source code exposure in React Serve... by c-hendricks on Thursday December 11, 2025 @08:20PM (#46239755)
Some of the anti-next might be from things like solid-start and tanstack-start existing, which can do similar things but without the whole "you've used state without marking as a client component thus I will stop everything" factor of nextjs.

Not to mention the whole middleware and being able to access the incoming request wherever you like.

Re:Denial of service and source code exposure in React Serve... by kyleee on Thursday December 11, 2025 @11:20PM (#46240834)
And vercel
Re:Denial of service and source code exposure in React Serve... by c-hendricks on Friday December 12, 2025 @11:25AM (#46245648)
That's true, can't blame people for having a bad taste of VC funded companies taking the reigns on open source projects.
Re:Denial of service and source code exposure in React Serve... by codemonkey-zeta on Thursday December 11, 2025 @09:11PM (#46240113)
Can you describe how rsc allows you to avoid rest endpoints? Are you just putting your rsc server directly on top of your database?
Re:Denial of service and source code exposure in React Serve... by berekuk on Thursday December 11, 2025 @10:53PM (#46240719)
If I control both the backend and the frontend, yes. Server-only async components on top of layout/page component hierarchy, components -> DTO layer -> Prisma. Similar to this: https://nextjs.org/blog/security-nextjs-server-components-ac...

You still need API routes for stuff like data-heavy async dropdowns, or anything else that's hard to express as a pure URL -> HTML, but it cuts down the number of routes you need by 90% or more.

Re:Denial of service and source code exposure in React Serve... by skydhash on Friday December 12, 2025 @05:32AM (#46242761)
You’re just shifting the problem from HTTP to an adhoc protocol on top of it.
Re:Denial of service and source code exposure in React Serve... by afavour on Friday December 12, 2025 @09:54AM (#46244707)
Yes but they’re also shifting the problem from one they explicitly have to deal with themselves to one the framework handles for them.

Personally I don’t like it but I do understand the appeal.

Re:Denial of service and source code exposure in React Serve... by skydhash on Friday December 12, 2025 @09:57AM (#46244733)
Maybe, but you go from one of the most tested protocol with a lot of tooling to another with not even a specification.
Re:Denial of service and source code exposure in React Serve... by reissbaker on Thursday December 11, 2025 @10:21PM (#46240521)
Personally, I love App Router: it reminds me of the Meta monorepos, where everything related to a certain domain is kept in the same directory. For example, anything related to user login/creation/deletion might be kept in the /app/users directory, etc.

But I really, really do not like React Server Components as they work today. I think it's probably better to strip them out in favor of just a route.ts file in the directory, rather than the actions files with "use server" and all the associated complexity.

Technically, you can build apps like that using App Router by just not having "use server" anywhere! But it's an annoying, sometimes quite dangerous footgun to have all the associated baggage there waiting for an exploit... The underlying code is there even if you aren't using it.

I think my ideal setup would be:

1. route.ts for RESTful routes

2. actions/SOME_FORM_NAME.ts for built-in form parsing + handling. Those files can only expose a POST, and are basically a named route file that has form data parsing. There's no auto-RPC, it's just an HTTP handler that accepts form data at the named path.

3. no other built-in magic.

Re:Denial of service and source code exposure in React Serve... by robertoandred on Thursday December 11, 2025 @11:55PM (#46240997)
Route files are still RSCs. Actions/“use server” are unrelated.
Re:Denial of service and source code exposure in React Serve... by reissbaker on Friday December 12, 2025 @01:02AM (#46241299)
Route files are no different than the pages router that preceded them, except they sit in a different filepath. They're not React components, and definitely not React Server Components. They're not even tsx/jsx files, which should hint at the fact that they're not components! They just declare ordinary HTTP endpoints.

RSCs are React components that call server side code. https://react.dev/reference/rsc/server-components

Actions/"use server" functions are part of RSC: https://react.dev/reference/rsc/server-functions They're the RPC system used by client components to call server functions.

And they're what everyone here is talking about: the vulnerabilities were all in the action/use server codepaths. I suppose the clearest thing I could have said is that I like App Router + route files, but I dislike the magic RPC system: IMO React should simplify to JSON+HTTP and forms+HTTP, rather than a novel RPC system that doesn't interoperate with anything else and is much more difficult to secure.

Re:Denial of service and source code exposure in React Serve... by stack_framer on Thursday December 11, 2025 @10:32PM (#46240593)
I find myself just wanting to go all the way back to SPAs—no more server-side rendering at all. The arguments about performance, time to first paint, and whatever else we're supposed to care about just don't seem to matter on any projects I've worked on.

Vercel has become a merchant of complexity, as DHH likes to say.

Re:Denial of service and source code exposure in React Serve... by farley13 on Thursday December 11, 2025 @11:05PM (#46240770)
I think the context matters here - for SEO heavy marketing pages I still see google only executing a full browser based crawl for a subset of pages. So SSR matters for the remainder.
Re:Denial of service and source code exposure in React Serve... by robertoandred on Thursday December 11, 2025 @11:56PM (#46241002)
SPAs can still be server rendered.
Re:Denial of service and source code exposure in React Serve... by yawaramin on Friday December 12, 2025 @10:23AM (#46244971)
Htmx does full server rendering and it works beautifully. Everything is RESTful–endpoints are resources, you GET (HTML) and POST (HTTP forms) on well-defined routes, and it works with any backend. Performance, including time to interactive and user device battery life, are great.
Re:Denial of service and source code exposure in React Serve... by bryanrasmussen on Thursday December 11, 2025 @11:42PM (#46240938)
OK I am personally surprised that anyone likes the Pages router? Pages routing has all the benefits (simple to get started the first time) and all the downsides (maintainability of larger projects goes to hell) of having your routing being determined by where in the file system things are.

I don't care about having things simple to get started the first time, because soon I will have to start things a second or third time. If I have a little bit more complexity to get things started because routing is handled by code and not filesystem placement then I will pretty quickly develop templates to handle this, and in the end it will be easier to get things started the nth time than it is with the simple version.

Do I like the app router? No, Vercel does a crap job on at least two things - routing and building (server codes etc. can be considered as a subset of the routing problem), but saying I dislike app router is praising page router with too faint a damnation.

Re:Denial of service and source code exposure in React Serve... by morsmodr on Friday December 12, 2025 @12:47AM (#46241244)
Remix 2 is beautiful in its abstractions. The thing with NextJS Roadmap is that it is tightly coupled with Vercel's financial incentives. A more complex & more server code runs ensure more $$$ for them. I don't see community being able to do much change just like how useContextSelector was deprioritized by the React Core team.

Align early on wrt values of a framework and take a closer look at the funder's incentives.

Re:Denial of service and source code exposure in React Serve... by awestroke on Friday December 12, 2025 @01:02AM (#46241298)
We're migrating away from both Next and Vercel post-haste
Re:Denial of service and source code exposure in React Serve... by Seattle3503 on Friday December 12, 2025 @01:14AM (#46241360)
What are you migrating to? Vanilla React?
Re:Denial of service and source code exposure in React Serve... by awestroke on Friday December 12, 2025 @06:11AM (#46242990)
Vanilla react, ts-rest
Re:Denial of service and source code exposure in React Serve... by Seattle3503 on Saturday December 13, 2025 @04:24PM (#46258214)
Gotcha, that makes sense. Thanks!
Re:Denial of service and source code exposure in React Serve... by spoiler on Friday December 12, 2025 @05:31AM (#46242753)
Probably an unpopular take, but I really think Vercel has lost the plot. I don't know what happened to the company internally. But, it feels like the first few, early, iterations of Next were great, and then it all started progressively turning into slop from a design perspective.

An example of this is filesystem routing. Started off great, but now most Next projects look like the blast radius of a shell script gone terribly wrong.

There's also a(n in)famous GitHub response from one of the maintainers backwards-rationalising tech debt and accidental complexity as necessary. They're clearly smart, but the feeling I got from reading that comment was that they developed Stockholm syndrome towards their own codebase.

Re:Denial of service and source code exposure in React Serve... by dawnerd on Thursday December 11, 2025 @05:16PM (#46238010)
I pretty much dumped a side project that was using next over the new router. It's so much more convoluted, way too many limitations. Who even really wants to make database queries in front end code? That's sketchy as heck.
Re:Denial of service and source code exposure in React Serve... by Frotag on Thursday December 11, 2025 @07:31PM (#46239403)
A lot of functionality is obviously designed for Vercel's hosting platform, with local equivalents as an afterthought.
Re:Denial of service and source code exposure in React Serve... by sangeeth96 on Thursday December 11, 2025 @05:27PM (#46238147)
This is what I asked my small dev team after I recently joined and saw that we were using Next for the product — do we know how this works? Do we have even a partial mental model of what's happening? The answers were sadly, pretty obvious. It was hard enough to get people to understand how hooks worked when they were introduced, but the newer Next versions seem even more difficult to grok.

I do respect the things React + Next team is trying to accomplish and it does feel like magic when it works but I find myself caring more and more about predictability when working with a team and with every major version of Next + React, that aspect seems to be drifting further and further away.

Re:Denial of service and source code exposure in React Serve... by stack_framer on Thursday December 11, 2025 @10:36PM (#46240609)
I feel the same. In fact, I'll soon be preparing a lunch and learn on trying out Solid.js. I'm hoping to convince the team that we should at least try a different mental model and see if we like it.
Re:Denial of service and source code exposure in React Serve... by thewtf on Friday December 12, 2025 @12:56AM (#46241269)
Should just use Vue.
Re:Denial of service and source code exposure in React Serve... by bargainbin on Friday December 12, 2025 @06:08AM (#46242973)
Should just use Svelte.
Re:Denial of service and source code exposure in React Serve... by braebo on Saturday December 13, 2025 @01:34PM (#46256775)
Using React instead of Svelte to build an app is like using a pile of wet noodles instead of a nail gun.
Re:Denial of service and source code exposure in React Serve... by ashishb on Thursday December 11, 2025 @05:23PM (#46238102)
Re:Denial of service and source code exposure in React Serve... by TZubiri on Thursday December 11, 2025 @06:56PM (#46239075)
I had this issue with a React app I inherited, there was a .env with credentials, and I couldn't figure out whether it was being read from the frontend or the backend.

So I ran a static analysis (grep) on the apk generated and

points light at face dramatically

the credentials were inside the frontend!

Re:Denial of service and source code exposure in React Serve... by jaredwiener on Thursday December 11, 2025 @08:05PM (#46239668)
Why would you have anything for the backend in an APK? Wouldnt that be an app, that by definition runs on the client?

Most frameworks also by default block ALL environment variables on the client side unless the name is preceded by something specific, like NEXT_PUBLIC_*

Re:Denial of service and source code exposure in React Serve... by mcpeepants on Thursday December 11, 2025 @09:54PM (#46240354)
> Most frameworks also by default block ALL environment variables on the client side

I’ve been out of full stack dev for ~5 years now, and this statement is breaking my brain

Re:Denial of service and source code exposure in React Serve... by TZubiri on Thursday December 11, 2025 @11:59PM (#46241015)
Why would you have anything for the backend in a browser app? Wouldn't that by definition run on the client?

These kind of node + Mobile apps typically use an embedded browser like electron or a builtin browser, it's not much different than a web app.

Re:Denial of service and source code exposure in React Serve... by lmm on Thursday December 11, 2025 @09:51PM (#46240339)
Yeah. Being able to write code that's polymorphic between server and client is great, but it needs to be explicit and checked rather than invisible and magic. I see an analogy with e.g. code that can operate on many different types: it's a great feature, but really you want a generics feature where you can control which types which pieces of code operate on, not a completely untyped language.
Re:Denial of service and source code exposure in React Serve... by danabramov on Friday December 12, 2025 @06:44AM (#46243214)
It is explicit and checked.

You have two poison pills (`import "server-only"` and `import "client-only"`) that cause a build error when transitively imported from the wrong environment. This lets you, for example, constrain that a database layer or an env file can never make it into the client bundle (or that some logic that requires client state can never be accidentally used from the stateless request/response cycle). You also have two directives that explicitly expose entry points between the two worlds.

The vulnerabilities in question aren't about wrong code/data getting pulled into a wrong environment. They're about weaknesses in the (de)serialization protocol which relied on dynamic nature of JavaScript (shared prototypes being writable, function having a string constructor, etc) to trick the server into executing code or looping. These are bad, yes, but they're not due to the client/server split being implicit. They're in the space of (de)serialization.

Re:Denial of service and source code exposure in React Serve... by lmm on Monday December 15, 2025 @07:45AM (#46273770)
> You have two poison pills (`import "server-only"` and `import "client-only"`) that cause a build error when transitively imported from the wrong environment.

Sure, but even though it's "build time" it feels more like runtime (indeed I think the only reason it works that way is your code is being run at build time). I should be able to look at a given piece of code and know locally whether it's client-side, server-side, or polymorphic, rather than having to trace through all its transitive imports.

Re:Denial of service and source code exposure in React Serve... by jaredklewis on Thursday December 11, 2025 @10:35PM (#46240602)
I do think RSC and server side rendering in general was over adopted.

Have a Landing/marketing page? Then, yes, by all means render on the server (or better yet statically render to html files) so you squeeze every last millisecond you can out of that FCP. Also easy to see the appeal for ecommerce or social media sites like facebook, medium, and so on. Though these are also use cases that probably benefit the least from React to begin with.

But for the "app" part of most online platforms, it's like, who cares? The time to load the JS bundle is a one time cost. If loading your SaaS dashboard after first login takes 2 seconds versus 3 seconds, who cares? The amount of complexity added by SSR and RSC is immense, I think the payout would have to be much more than it is.

Re:Denial of service and source code exposure in React Serve... by sakesun on Friday December 12, 2025 @01:38AM (#46241452)
Deeply agree.
Re:Denial of service and source code exposure in React Serve... by procaryote on Friday December 12, 2025 @12:55PM (#46246649)
I've been at an embarassing number of places where turning off server side rendering improved performance as the number of browsers rendering content scales with the number of users, but the server-side rendering provisioning doesn't
Re:Denial of service and source code exposure in React Serve... by joshdavham on Thursday December 11, 2025 @10:37PM (#46240620)
I'm no javascript framework expert, but how vulnerable do people estimate other frameworks like Angular, Sveltekit and Nuxt to be to this sort of thing? Is React more disposed to be at risk? Is it just because there are more eyes on React due to its popularity?
Re:Denial of service and source code exposure in React Serve... by rk06 on Thursday December 11, 2025 @10:53PM (#46240714)
nuxt, sveltekit etc don't have RSC equivalent. and won't have in future either. Vue has discussed it and explicitly rejected it. also RSC was proposed to sveltekit, they also rejected it citing public endpoint should not be hidden

they may get other vulnemerelities as they are also in JS, but RSC class vulelnebereleties won't be there

Re:Denial of service and source code exposure in React Serve... by rk06 on Friday December 12, 2025 @06:22AM (#46243072)
please forgive typos in above comment. i can no longer edit them
Re:Denial of service and source code exposure in React Serve... by joshdavham on Friday December 12, 2025 @12:04PM (#46246054)
Haha don’t sweat it dude. Happens to literally everyone on HN.
Re:Denial of service and source code exposure in React Serve... by 0xblinq on Thursday December 11, 2025 @11:54PM (#46240996)
This is why I'm a big advocate of Inertia.js [1]. For me it's the right balance of using "serious" batteries included traditional MVC backends like Laravel, Rails, Adonis, Django, etc... and modern component based frontend tools like React, Vue, Svelte, etc. Responsibilities are clear, working in it is easy, and every single time I used it feels like you're using the right tool for each task.

I can't recommend it enough. If you never tried/learnt about it, check it out. Unless you're building an offline first app, it's 100% the safest way to go in my opinion for 99.9% of projects.

[1] https://inertiajs.com/

Re:Denial of service and source code exposure in React Serve... by tacker2000 on Friday December 12, 2025 @05:08AM (#46242612)
I am also in love with Inertia, it lets you use a React frontend and a Laravel backend without a dedicated API or endpoints, its so much faster to develop and iterate, and you dont need to change your approach or mental model, it just makes total sense.

Instead of creating routes and using fetch() you just pass the data directly to the client side react jsx template, inertia automatically injects the needed data as json into the client page.

Re:Denial of service and source code exposure in React Serve... by tonyhart7 on Friday December 12, 2025 @12:39AM (#46241208)
turns out a separation of concern is valid approach for decades

React team reinvent the wheel again and again and now we back to laravel

Re:Denial of service and source code exposure in React Serve... by dirkc on Friday December 12, 2025 @03:40AM (#46242116)
I 100% agree. I didn't even bother to think about the security implications - why worry about security implications if the whole things seems like a bad idea?

In retrospect I should have given it more thought since React Server Components are punted in many places!