{"id":43,"date":"2026-10-18T04:30:44","date_gmt":"2026-10-18T04:30:44","guid":{"rendered":"https:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/"},"modified":"2026-10-18T04:30:44","modified_gmt":"2026-10-18T04:30:44","slug":"securing-file-uploads-web-applications","status":"publish","type":"post","link":"http:\/\/www.studymorph.com\/blog\/securing-file-uploads-web-applications\/","title":{"rendered":"Securing File Uploads in Modern Web Applications: A Practical Developer&#8217;s Guide"},"content":{"rendered":"<p>Nearly every modern web application eventually needs a file upload feature. Whether you are building user profile avatars, document imports, or invoice attachments, accepting files from users is an everyday requirement. Unfortunately, file uploads also represent one of the most perilous attack surfaces in web engineering.<\/p>\n<p>A misconfigured upload endpoint can turn a simple form into a gateway for Remote Code Execution (RCE), Server-Side Request Forgery (SSRF), distributed denial-of-service, or cross-site scripting (XSS). In this guide, we will unpack how attackers exploit naive upload systems and walk through a pragmatic, battle-tested defense strategy you can apply right away.<\/p>\n<h2>The Anatomy of an Insecure File Upload<\/h2>\n<p>Many developers start by validating uploads on the client side using the HTML <code>accept<\/code> attribute or inspecting the file extension in JavaScript. While useful for user experience, client-side validation provides zero security. Attackers can bypass it effortlessly with a simple <code>curl<\/code> command or proxy tool like Burp Suite.<\/p>\n<p>Even basic backend checks often fall short. Here are the most common security oversights:<\/p>\n<ul>\n<li><strong>Trusting the <code>Content-Type<\/code> header:<\/strong> The MIME type sent by the browser is entirely controlled by the client. An attacker can upload a malicious script named <code>backdoor.php<\/code> while setting the <code>Content-Type<\/code> header to <code>image\/jpeg<\/code>.<\/li>\n<li><strong>Relying solely on file extensions:<\/strong> Blacklisting extensions like <code>.exe<\/code> or <code>.php<\/code> fails against double extensions (such as <code>invoice.php.jpg<\/code> on misconfigured web servers), null-byte injections, or alternate executable formats (such as <code>.phtml<\/code>, <code>.phar<\/code>, or executable SVGs containing malicious JavaScript).<\/li>\n<li><strong>Directory traversal via filenames:<\/strong> If your server saves an uploaded file using its original name (for example, <code>..\/..\/var\/www\/html\/shell.php<\/code>), an attacker might overwrite critical application code or configuration files.<\/li>\n<\/ul>\n<h2>The Core Defense Pipeline: Validate, Rename, and Constrain<\/h2>\n<p>Securing file uploads does not require enterprise-grade complexity; it requires a disciplined, multi-layered pipeline. Every uploaded byte must be treated as untrusted input.<\/p>\n<h3>1. Verify Real File Types Using Magic Bytes<\/h3>\n<p>Never rely on user-supplied filenames or MIME headers. Instead, read the initial bytes of the file stream (known as &#8220;magic numbers&#8221; or magic bytes) on the server to determine the actual file signature. For example, a valid PNG file always begins with the hex signature <code>89 50 4E 47 0D 0A 1A 0A<\/code>.<\/p>\n<p>In Node.js, you can inspect the file stream using lightweight packages like <code>file-type<\/code>:<\/p>\n<pre><code>import { fileTypeFromBuffer } from 'file-type';\n\nasync function validateUploadedBuffer(buffer) {\n  const type = await fileTypeFromBuffer(buffer);\n  const ALLOWED_MIME_TYPES = ['image\/jpeg', 'image\/png', 'application\/pdf'];\n\n  if (!type || !ALLOWED_MIME_TYPES.includes(type.mime)) {\n    throw new Error('Unsupported or malicious file type detected.');\n  }\n\n  return type;\n}<\/code><\/pre>\n<h3>2. Neutralize File Names with Cryptographic UUIDs<\/h3>\n<p>Never persist the original filename to your filesystem or object storage. Retaining original names invites directory traversal attacks and metadata-based injection vulnerabilities. Instead, discard the user&#8217;s filename entirely and generate an opaque, random identifier such as a UUID v4.<\/p>\n<p>If you need to preserve the user&#8217;s original filename for display purposes (for example, showing &#8220;Q3_Financial_Summary.pdf&#8221; in an audit log), store that filename in your database as an escaped text column, completely separated from the storage key.<\/p>\n<h3>3. Enforce Strict Size and Memory Boundaries<\/h3>\n<p>Unbounded file uploads invite disk exhaustion and memory exhaustion (DoS). Enforce hard limits on two levels: at your reverse proxy (such as Nginx&#8217;s <code>client_max_body_size<\/code>) and within your application runtime. Stream incoming files directly rather than buffering hundreds of megabytes into application memory simultaneously.<\/p>\n<h2>Isolating Uploads: Storage and Delivery Architecture<\/h2>\n<p>Where and how you store files matters just as much as how you validate them. Storing user-uploaded files directly inside your web application&#8217;s public root folder (e.g., <code>\/public\/uploads<\/code>) is one of the quickest paths to full server compromise.<\/p>\n<h3>Never Serve Uploads from Application Compute<\/h3>\n<p>When files are stored on the same server that executes your backend code, a single misinterpreted script can execute arbitrary system commands. Instead, offload files directly to isolated cloud object storage like Amazon S3, Cloudflare R2, or Google Cloud Storage.<\/p>\n<p>The gold standard for handling large or frequent uploads is the <strong>presigned URL pattern<\/strong>:<\/p>\n<ol>\n<li>The client requests an upload authorization token from your backend.<\/li>\n<li>The backend validates the user&#8217;s permissions, generates a short-lived, presigned <code>PUT<\/code> URL directly to object storage, and returns it.<\/li>\n<li>The client uploads the file directly to object storage, bypassing your application server entirely.<\/li>\n<li>Object storage fires a notification or webhook back to your server to trigger validation or background processing.<\/li>\n<\/ol>\n<blockquote>\n<p>For instance, when architecting the document pipeline for <a href=\"https:\/\/kaskita.studymorph.com\" target=\"_blank\" rel=\"noopener noreferrer\">KasKita Financial Ledger<\/a> \u2014 Study Morph&#8217;s multi-entity financial bookkeeping system \u2014 user-uploaded bank receipts and tax invoices are handled strictly via presigned object storage URLs. By generating cryptographically signed, short-lived upload URLs and isolating file consumption completely from the application&#8217;s runtime compute, receipts are parsed without exposing the server environment to arbitrary code execution risks.<\/p>\n<\/blockquote>\n<h3>Hardening Delivery Headers<\/h3>\n<p>When users download or view uploaded files, browsers can still be tricked into executing malicious code (like an SVG embedded with XSS scripts). Always configure your asset delivery layer or CDN with strict response headers:<\/p>\n<ul>\n<li><code>Content-Disposition: attachment; filename=\"safe-name.pdf\"<\/code> \u2014 Forces the browser to download the file rather than rendering it inline.<\/li>\n<li><code>X-Content-Type-Options: nosniff<\/code> \u2014 Prevents the browser from MIME-sniffing the payload into an executable format.<\/li>\n<li><code>Content-Security-Policy: default-src 'none'<\/code> \u2014 When serving user files from a dedicated subdomain (such as <code>user-assets.example.com<\/code>), isolate the sandbox so cookies and scripts cannot bleed into your main application domain.<\/li>\n<\/ul>\n<h2>Summary Checklist<\/h2>\n<p>Securing file uploads does not require reinventing the wheel. Before shipping an upload endpoint to production, verify your checklist:<\/p>\n<ul>\n<li><strong>Client independent:<\/strong> Server-side validation handles all checks, ignoring client-submitted MIME types.<\/li>\n<li><strong>Magic byte inspection:<\/strong> Content is verified by analyzing byte signatures, not just file extensions.<\/li>\n<li><strong>UUID storage keys:<\/strong> Original filenames are discarded or isolated in a database.<\/li>\n<li><strong>Isolated storage:<\/strong> Uploads are kept outside the executable web root, ideally in dedicated object storage.<\/li>\n<li><strong>Safe response headers:<\/strong> <code>X-Content-Type-Options: nosniff<\/code> and a sandbox CSP are active on asset domains.<\/li>\n<\/ul>\n<p>By enforcing these foundational practices, your users get a smooth upload experience while your infrastructure remains resilient against malicious payloads.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Allowing users to upload files shouldn&#8217;t compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.<\/p>\n","protected":false},"author":1,"featured_media":44,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[63,19,15,38],"class_list":["post-43","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops-security","tag-apis","tag-devops","tag-security","tag-web-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7-RC1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to Secure File Uploads in Web Applications | Study Morph<\/title>\n<meta name=\"description\" content=\"Allowing users to upload files shouldn&#039;t compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Secure File Uploads in Web Applications | Study Morph\" \/>\n<meta property=\"og:description\" content=\"Allowing users to upload files shouldn&#039;t compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/\" \/>\n<meta property=\"og:site_name\" content=\"Study Morph Tech Journal \u2014 IT Consulting &amp; Engineering\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-18T04:30:44+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"673\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tubagus Putra Kencana\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tubagus Putra Kencana\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/\"},\"author\":{\"name\":\"Tubagus Putra Kencana\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/#\\\/schema\\\/person\\\/95920a6db16182bc43a3d8ef330679cd\"},\"headline\":\"Securing File Uploads in Modern Web Applications: A Practical Developer&#8217;s Guide\",\"datePublished\":\"2026-10-18T04:30:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/\"},\"wordCount\":916,\"image\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.studymorph.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg\",\"keywords\":[\"APIs\",\"DevOps\",\"Security\",\"Web Development\"],\"articleSection\":[\"DevOps &amp; Security\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/\",\"url\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/\",\"name\":\"How to Secure File Uploads in Web Applications | Study Morph\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/www.studymorph.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg\",\"datePublished\":\"2026-10-18T04:30:44+00:00\",\"author\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/#\\\/schema\\\/person\\\/95920a6db16182bc43a3d8ef330679cd\"},\"description\":\"Allowing users to upload files shouldn't compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.\",\"breadcrumb\":{\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#primaryimage\",\"url\":\"http:\\\/\\\/www.studymorph.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg\",\"contentUrl\":\"http:\\\/\\\/www.studymorph.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg\",\"width\":1200,\"height\":673},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/securing-file-uploads-web-applications\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Securing File Uploads in Modern Web Applications: A Practical Developer&#8217;s Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/#website\",\"url\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/\",\"name\":\"Study Morph Tech Journal \u2014 IT Consulting &amp; Engineering\",\"description\":\"Deep-dive architectural insights, system engineering case studies, and digital transformation best practices.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"http:\\\/\\\/studymorph.com\\\/blog\\\/#\\\/schema\\\/person\\\/95920a6db16182bc43a3d8ef330679cd\",\"name\":\"Tubagus Putra Kencana\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g\",\"caption\":\"Tubagus Putra Kencana\"},\"description\":\"Founder &amp; Principal Engineer at Study Morph. Specializing in modern web architecture, cloud systems, and scalable digital platforms.\",\"sameAs\":[\"http:\\\/\\\/localhost\\\/study-morph-baru\\\/blog\"],\"url\":\"http:\\\/\\\/www.studymorph.com\\\/blog\\\/author\\\/tubagus-putra-kencana\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Secure File Uploads in Web Applications | Study Morph","description":"Allowing users to upload files shouldn't compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/","og_locale":"en_US","og_type":"article","og_title":"How to Secure File Uploads in Web Applications | Study Morph","og_description":"Allowing users to upload files shouldn't compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.","og_url":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/","og_site_name":"Study Morph Tech Journal \u2014 IT Consulting &amp; Engineering","article_published_time":"2026-10-18T04:30:44+00:00","og_image":[{"width":1200,"height":673,"url":"http:\/\/studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg","type":"image\/jpeg"}],"author":"Tubagus Putra Kencana","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Tubagus Putra Kencana","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#article","isPartOf":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/"},"author":{"name":"Tubagus Putra Kencana","@id":"http:\/\/studymorph.com\/blog\/#\/schema\/person\/95920a6db16182bc43a3d8ef330679cd"},"headline":"Securing File Uploads in Modern Web Applications: A Practical Developer&#8217;s Guide","datePublished":"2026-10-18T04:30:44+00:00","mainEntityOfPage":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/"},"wordCount":916,"image":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#primaryimage"},"thumbnailUrl":"http:\/\/www.studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg","keywords":["APIs","DevOps","Security","Web Development"],"articleSection":["DevOps &amp; Security"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/","url":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/","name":"How to Secure File Uploads in Web Applications | Study Morph","isPartOf":{"@id":"http:\/\/studymorph.com\/blog\/#website"},"primaryImageOfPage":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#primaryimage"},"image":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#primaryimage"},"thumbnailUrl":"http:\/\/www.studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg","datePublished":"2026-10-18T04:30:44+00:00","author":{"@id":"http:\/\/studymorph.com\/blog\/#\/schema\/person\/95920a6db16182bc43a3d8ef330679cd"},"description":"Allowing users to upload files shouldn't compromise your application. Learn practical, actionable techniques to validate, sanitize, and isolate uploads safely.","breadcrumb":{"@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#primaryimage","url":"http:\/\/www.studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg","contentUrl":"http:\/\/www.studymorph.com\/blog\/wp-content\/uploads\/2026\/10\/securing-file-uploads-in-modern-web-applications-a-practical-developers-guide-cover.jpg","width":1200,"height":673},{"@type":"BreadcrumbList","@id":"http:\/\/studymorph.com\/blog\/securing-file-uploads-web-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/studymorph.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Securing File Uploads in Modern Web Applications: A Practical Developer&#8217;s Guide"}]},{"@type":"WebSite","@id":"http:\/\/studymorph.com\/blog\/#website","url":"http:\/\/studymorph.com\/blog\/","name":"Study Morph Tech Journal \u2014 IT Consulting &amp; Engineering","description":"Deep-dive architectural insights, system engineering case studies, and digital transformation best practices.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/studymorph.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"http:\/\/studymorph.com\/blog\/#\/schema\/person\/95920a6db16182bc43a3d8ef330679cd","name":"Tubagus Putra Kencana","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e3030f9ebf657d3c71681da0b8b893e64ad0d8ee62a7e35d8048b3fe1eb8ba0e?s=96&d=mm&r=g","caption":"Tubagus Putra Kencana"},"description":"Founder &amp; Principal Engineer at Study Morph. Specializing in modern web architecture, cloud systems, and scalable digital platforms.","sameAs":["http:\/\/localhost\/study-morph-baru\/blog"],"url":"http:\/\/www.studymorph.com\/blog\/author\/tubagus-putra-kencana\/"}]}},"_links":{"self":[{"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/posts\/43","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/comments?post=43"}],"version-history":[{"count":0,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/posts\/43\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/media\/44"}],"wp:attachment":[{"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/media?parent=43"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/categories?post=43"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.studymorph.com\/blog\/wp-json\/wp\/v2\/tags?post=43"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}