File permissions: fix access without opening the entire application
An upload folder chmod 777 "so it works" becomes a webshell entry six months later. Permissions need surgery, not blanket fixes.
Browse our Technical posts on European hosting.
No results for this search
An upload folder chmod 777 "so it works" becomes a webshell entry six months later. Permissions need surgery, not blanket fixes.
Fail2ban quiets weekend SSH scans — until the attacker slows below the threshold or hits the API directly.
Every VPS with port 22 open to the Internet is scan bait. A bastion concentrates access — if the team can still connect without friction.
Grafana, Jenkins, phpMyAdmin — tools without native SSO rushed online. An OAuth proxy adds a front door without rewriting the app.
A legitimate partner gets throttled during a spike while a scraper rotates IPs. Good rate limiting protects without punishing.
Stripe retries after your 500 — and you double-credit the customer. A reliable webhook signs, idempotents, and is observable.
SPF and DKIM are green, yet mail lands in spam: PTR does not match HELO. This invisible detail weighs heavily at major filters.
Your team sees the right IP on VPN while customers see another — or worse, the same private IP. Split-horizon fixes that, but only if the boundary is documented.
Mail sends, but Gmail spam-filters it: SPF passes, DKIM signs, DMARC fails alignment. The three protocols do not replace each other — they stack.
Checkout fails while internal DNS monitoring stays green: anycast only helps if you measure from outside. Here is how to evaluate it before the premium invoice.
"The DNS switch will be instant" — reassuring and false. Without lowering TTL upfront, a host migration drags 24–48 h in ISP caches.
Certbot "always worked" — until silent renewal failed because DNS changed and nobody monitored certificates, only HTTP uptime checks.
A config copied for an SSL Labs A+ grade can block an enterprise client the next month. How to choose maintainable TLS — Mozilla Intermediate, renewal, HSTS — without incomprehensible cipher lists.
HTTP/2 fixes six parallel TCP connections — not twelve synchronous scripts blocking render. Multiplexing helps; it does not replace front-end optimization.
loading="lazy" on the hero logo and first product photo — LCP explodes and Google penalizes what you thought was optimization.
Switching the whole site to AVIF without fallback leaves 5% of visitors with broken icons — often B2B clients on frozen corporate browsers.
Brotli level 11 on every dynamic response — fewer bytes, more CPU, TTFB climbing. Useful compression separates static assets from on-the-fly HTML.
Inconsistent Cache-Control between nginx, PHP, and Cloudflare — users get stale content or origin saturates because nothing is edge-cacheable.
Twenty Slack alerts per night, all "CPU > 70%" on staging environments — until prod fails in the morning and nobody watches the on-call channel anymore.
Logs say the API timed out; Prometheus shows a high p95 — but neither reveals which SQL query on the catalog service took seven seconds. The trace shows it in a single span.
The dashboard is green while checkout takes eight seconds — a sign you measure the machine, not the path that blocks. How to pick useful Prometheus metrics before drowning Grafana.
SSH into three servers to grep the same request_id — while the incident grows. Without correlated centralized logs, a distributed outage stays an incomplete puzzle.
Open TCP 443 and a live PHP process do not guarantee the app can serve an order or reach its database. A useful health check tests what the user expects.
Deploying to 5% of traffic protects nobody if nobody measures error rate or knows how to roll back in thirty seconds.