76 karma · joined February 24, 2022
I have to disagree here. You are making assumptions that every developer in an org will always do the correct thing and deploy code that won't be exploitable to SQL injections, XSS, file inclusion, etc... That's just not the case. I'm all for doing the correct thing, and not just performing security theater, but WAFs do offer some protection. You need multiple layers of security covering the holes that may left in other layers. And a WAF can be one of those layers of protection.
With this you stack you have a dead simple web application that can be completely self contained in the executable with `go:embed`. That makes deployment an absolute breeze. Since I also attempt to use as few third party packages as possible and the ones I do use are pure Go, I can containerize my app and deploy it with Google's distroless base image. That helps in reducing my attack surface.
And while my app is a monolith using an embedded LibSQL database (SQlite), I can easily change my app configurations via environment variables to use a remote LibSQL server and then scale my app behind a load balancer with more servers.
It's honestly such a simple yet effective stack for development. My one web app handles both the api and web requests, I can easily scale, and building my app is fast.
Edit: I should also preface, that all the HTML/CSS/JS used by my website are (mostly) vanilla and developed by myself. So no use of a CSS library like Bootstrap, Bulma, or Tailwind. And also no use of JS libraries like JQuery. I do use HTMX and Alpine, but they are both being embedded into the executable like I stated above.
HTMX + Go is such a great combo for those who don't necessarily enjoy JS/TS. I just want a good user experience and also a good dev experience. And for me, HTMX + Go is that. I can create reactive websites while working in my preferred language. I'm also shipping minimal amount of data to the user so and using as little CPU and memory as I can.
For the rest of your questions,
- Auth: Auth0. Simple to get started, and depending on your plan you can enable SSO for business clients.
- Frontend: Plain ol' HTML, CSS, and minimal JS. This is where HTMX and AlpineJS comes into play. Elements can be updated without a whole page reload creating a better user experience.
- Backend: Go. A language I love to use. Fast, simple, and deployed very quickly.
- Database: Turso. Dead simple, easy to use, and with easy replication to different regions.
My app code is all contained in a monolith, which is deployed onto a dedicated web server. I can either update the server resources or using a load balancer I can deploy more servers running the application to increase scale (if necessary).
I don't know why, but I truly do not like this. So if I create a "HelloController" class does the middleware just start automatically routing "/hello" to it?
``` > Get-Process | Select -Last 5 Name,ProcessName,Company,Path | ConvertTo-Json [ { "Name": "winlogon", "ProcessName": "winlogon", "Company": null, "Path": null }, { "Name": "WmiPrvSE", "ProcessName": "WmiPrvSE", "Company": null, "Path": null }, { "Name": "WMIRegistrationService", "ProcessName": "WMIRegistrationService", "Company": null, "Path": null }, { "Name": "Zoom", "ProcessName": "Zoom", "Company": "Zoom Video Communications, Inc.", "Path": "C:\\Users\\user\\AppData\\Roaming\\Zoom\\bin\\Zoom.exe" }, { "Name": "Zoom", "ProcessName": "Zoom", "Company": "Zoom Video Communications, Inc.", "Path": "C:\\Users\\user\\AppData\\Roaming\\Zoom\\bin\\Zoom.exe" } ] ```
And when you say "Just the common '|fl XXX' expression will trigger this" does that mean you are doing this `<command> | fl X | ConvertTo-Json`? Because if so, that's why your getting all the PS specific junk.